Linux任务计划
一、定义
在特定的时间按照事先定义好的脚本规则执行的任务。管理员在管理服务器的时候,需要在特定地某个时间执行某个任务,就要用到Linux系统的计划任务。例如运行时间需要精确到分钟;或者在凌晨执行某个脚本等
二、分类
1、单次任务
2、周期性任务
三、主要命令
(1)、at、batch
(2)、crontab
1、at
定义在未来时间点一次性执行某任务;支持使用作业队列,默认为a队列,队列命名为单字母;
at [option]... TIME
TIME:
1、绝对时间
HH:MM
MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD
tomorrow
2、相对时间
now+#UNIT
UNIT:minute,hour,day,week
3、模糊时间
midnight
noon
teatime
option:
-q QUEUE:指定at作业队列
-f FILENAME:执行文件FILENAME中作业任务
-l:查看作业队列中等待执行的作业任务,等同于atq命令
-c at_job_nu:查看等待执行作业内容
-d:删除指定作业。等同于atrm
注:at TIME 命令行输入要执行的任务命令,按ctrl+d结束本次输入,并生成一个任务计划。
问题一:Can't open /var/run/atd.pid to signal atd. No atd running?
如图:
结果是系统时间已经超出计划任务的执行时间,但是任务未执行
查看atd服务状态
启动服务
再次atq查看任务,OK!
2、batch
由系统自行选择在资源较为空闲时运行指定的任务;
3、crontab
定义周期性任务计划,守护进程crond
分类:
(1)、系统cron任务:没有默认运行用户,需要额外指定运行者
配置文件:/etc/crontab;文件指定运行shell,环境变量PATH,邮件接收者和默认家目录
需要用户定义的字段:
* * * * * user-name command to be executed
1、前五个*代表运行时间周期。分别是分钟,小时,日,月,星期
2、user-name:额外指定的运行用户
3、command to be executed:要运行的任务命令或脚本
(2)、用户cron任务:由某个用户所提交,默认就以提交者的身份运行,所以无需额外指定运行者
配置文件:/var/spool/cron/USERNAME
需要用户定义的字段:
* * * * * command to be executed
1、前五个*代表运行时间周期。分别是分钟,小时,日,月,星期
2、command to be executed:要运行的任务命令或脚本
时间点取值:
1、分钟----[0,59]
2、小时----[0,23]
3、日------[1,31]
4、月------[1,12]或简写英文[Jan,Feb,Mar,Apr,May,June,July,Aug,Sept,Oct,Nov,Dec]
5、星期----[0,7]或简写英文[Mon,Tue,wed,Thu,Fri,Sat,Sun] 0,7均为星期天
注意:几月几号与周几,不建议同时使用
时间表示方法:
*:对应时间点有效取值范围的任意时间点
-:特定连续时间范围,例如4-10
,:多个离散的时间点,例如4,5,7,10
/#:有效时间范围内的每#时间;用于指定频率,例如1-30/2,*/4
命令使用:
crontab [-u user] [-l | -r | -e]
-u:仅root用户使用,管理某用户的任务计划
-l:显示任务列表
-r:移除所有任务
-e:编辑当前用户的任务
注意:
(1) 如果不想接收任务执行结果的通知邮件:
COMMAND > /dev/null
COMMAND &> /dev/null
(2) 对于crontab文件来讲,%有特殊功用;如果命令中会出现%, 要记得转义,或者用单引号对其引用;
(3) crontab的PATH变量与用户的变量不完全相同,所以,建议在cron中的任务要使用绝对路径
四、练习:
1、每周一到周六的凌晨3点20分,运行cp命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD;
20 3 * * 1-6 /bin/cp -a /etc/ /backups/etc-`/bin/date '+\%Y-\%m-\%d'`20 3 * * 1-6 /bin/cp -a /etc/ /backups/etc-$(/bin/date +\%F)
2、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss
30 2 * * 7 /bin/cp -a /etc/fstab /backup/fstab-`/bin/date '+\%Y-\%m-\%d-\%H-\%M-\%S'`30 2 * * 7 /bin/cp -a /etc/fstab /backup/fstab-$(/bin/date +\%F-\%H-\%M-\%S)
3、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线;
0 0 * * * /bin/echo "======================" >> /statistics/meminfo.txt && /bin/grep '^[S|M]' /proc/meminfo >> /statistics/meminfo