一、at一次性计划任务
格式:
at + 时间 命令
安装at
# yum install at -y
如果执行at命令时,出现一下情况
Can't open /var/run/atd.pid to signal atd. No atd running?
解决办法:
# chkconfig --level 35 atd on
# service atd start
普通用户也能够做计划任务
at+未来时间
# at 2018-11-11
Ctrl + d结束所要添加执行的命令
24进制的时间
# at 10:00 2018-11-11
# at 21:20 2018-11-11
12进制时间
# at 11am 2018-11-11
# at 9:10pm 2018-11-11
days天
# at 10am+10days
weeks周
# at 10am+10weeks
两小时后执行任务
#at now+2hours
查看计划任务
两种方法
#atq
#at -l
查看具体的计划任务的内容
# cd /var/spool/at/
# ls
# cat a0000301882038
删除计划任务
两种方法
# atrm 3
# at -d 8
一次删除多个计划任务
# atrm {11..14}
凡是在at.deny中的是不允许做计划任务的,默认为空(黑名单)
# vi /etc/at.deny
默认不存在,需要创建。允许做计划任务(白名单)
# vi /etc/at.allow
二、crontab周期性计划任务
查看服务状态
# service crond status
# systemctl status crond
停止crontab定时任务执行
# service crond stop
# systemctl stop crond
开启crontab定时任务执行
# service crond start
# systemctl start crond
查看计划任务
crontab的语法规则格式:
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
数字范围 | 0~59 | 0~23 | 1~31 | 1~12 | 0~7 | 需要执行的命令 |
周的数字为 0 或 7 时,都代表“星期天”的意思。
另外,还有一些辅助的字符,大概有下面这些:
特殊字符 | 代表意义 |
*(星号) | 代表任何时刻都接受的意思。举例来说,0 12 * * * command 日、月、周都是*,就代表着不论何月、何日的礼拜几的12:00都执行后续命令的意思。 |
,(逗号) | 代表分隔时段的意思。举例来说,如果要执行的工作是3:00与6:00时,就会是:0 3,6 * * * command 时间还是有五列,不过第二列是 3,6 ,代表3与6都适用 |
-(减号) | 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行一项工作:20 8-12 * * * command 仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思 |
/n(斜线) | 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则:*/5 * * * * command 用*与/5来搭配,也可以写成0-59/5,意思相同 |
大致范围如下图:
编辑计划任务
# crontab -e
#分/分钟 时/几点 天/几号 月/几月份 周/星期几 命令
#如何不考虑某个时间单位的话,那么可以用*来表示,有“每”的意思
0 7 * * * /bin/aa.sh
0,5,10 7 * * * /bin/aa.sh
0,5,10 7 * * 1-5 /bin/aa.sh
0,5,10 7 * * 1-5/1 /bin/aa.sh
# /5 每次递增5
0-10/5 7 * * 1-5 /bin/aa.sh
0-10/5,30 7 * * 1-5 /bin/aa.sh
#----------------------------------------------------------------------------------------
0 7 * 1-3 1-5 /bin/aa.sh
0 7 1-10 1-3 * /bin/aa.sh
#分、时、月、周是and的关系
#分、时、天、月也是and的关系
0 7 1-10 1-3 1-5 /bin/aa.sh
#天和周是or的关系,满足一个条件即可
#如果遇到一个比较复杂的问题,那么把他拆成几个简单的问题就行了
#例如
#让你写一个计划任务:每个月最后一天执行/aa.sh
0 2 31 1,3,5,7,8,10,12 * /bin/aa.sh
计划任务保存位置
# cat /var/spool/cron/root
删除计划任务
# crontab -r
# crontab -l
系统中存在的计划任务
# ls /etc/cron*
凡是在at.deny中的是不允许做计划任务的,默认为空(黑名单)
# vi /etc/cron.deny
默认不存在,需要创建。允许做计划任务(白名单)
# vi /etc/cron.allow
例子:
#每天早上6点10分 10 6 * * * date #没两个小时 0 */2 * * * date #晚上11点到早上8点之间每2个小时,早上8点 0 23-7/2,8 * * * date #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 0 11 4 * mon-wed date #1月份一号早上4点 0 4 1 jan * date
管理系统临时文件
临时文件存放位置
/tmp/不能删除该目录
# systemctl list-unit-files | grep tmpfile
systemd-tmpfiles-setup.service这个服务定期读取一下三个目录
# ls /usr/lib/tmpfiles.d/
# ls /run/tmpfiles.d/
# ls /etc/tmpfiles.d/
优先级从上到下依次增高,最后不要去动上面两个里面的内容
创建aa.conf
使aa.conf生效
# systemd-tmpfiles --create aa.conf
# systemd-tmpfiles --clean aa.conf
# cd /usr/lib/systemd/system
# vi systemd-tmpfiles-clean.timer
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
#当我们的系统运行15分钟或者说systemd服务运行15分钟之后, 就会执行systemd-tmpfiles这个命令
#如果系统没有重启,每隔一天执行这个命令
参考博客:
crontab的语法规则格式(每分钟、每小时、每天、每周、每月、每年定时执行 规则)
https://blog.csdn.net/xinyflove/article/details/83178876