天天看点

Linux计划任务

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?

如图:

Linux计划任务
结果是系统时间已经超出计划任务的执行时间,但是任务未执行
Linux计划任务
查看atd服务状态
Linux计划任务
启动服务
Linux计划任务
再次atq查看任务,OK!
Linux计划任务

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      

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)      
Linux计划任务

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)      
Linux计划任务

3、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线;

0 0 * * * /bin/echo "======================" >> /statistics/meminfo.txt && /bin/grep '^[S|M]' /proc/meminfo >> /statistics/meminfo      
Linux计划任务

继续阅读