Linux计划任务

Linux任务计划shell

1、定义bash

在特定的时间按照事先定义好的脚本规则执行的任务。管理员在管理服务器的时候,须要在特定地某个时间执行某个任务,就要用到Linux系统的计划任务。例如运行时间须要精确到分钟;或者在凌晨执行某个脚本等服务器

2、分类ide

1、单次任务spa

2、周期性任务命令行

3、主要命令blog

1atbatch队列

2crontab进程

1atcrontab

定义在将来时间点一次性执行某任务;支持使用做业队列,默认为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

UNITminutehourdayweek

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?

如图:

wKioL1XtNgSiN65kAACbIJeKDho192.jpg

结果是系统时间已经超出计划任务的执行时间,可是任务未执行

wKioL1XtNhDgUpjNAACvFrpPJBg523.jpg

查看atd服务状态

wKiom1XtM_Oga-CWAABKzRafs4g499.jpg 

启动服务

wKioL1XtNimAyf2LAABE0VfF4fw977.jpg

再次atq查看任务,OK

wKioL1XtNjXDmRMpAAFVwvWnp58608.jpg

2batch

由系统自行选择在资源较为空闲时运行指定的任务;

3crontab

定义周期性任务计划,守护进程crond

分类:

1、系统cron任务:没有默认运行用户,须要额外指定运行者

配置文件:/etc/crontab文件指定运行shell,环境变量PATH,邮件接收者和默认家目录

须要用户定义的字段:

*  *  *  *  * user-name command to be executed

1、前五个*表明运行时间周期。分别是分钟,小时,日,月,星期

2user-name:额外指定的运行用户

3command to be executed:要运行的任务命令或脚本

2、用户cron任务:由某个用户所提交,默认就以提交者的身份运行,因此无需额外指定运行者

配置文件:/var/spool/cron/USERNAME

须要用户定义的字段:

*  *  *  *  * command to be executed

1、前五个*表明运行时间周期。分别是分钟,小时,日,月,星期

2command 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) crontabPATH变量与用户的变量不彻底相同,因此,建议在cron中的任务要使用绝对路径

 

4、练习:

1、每周一到周六的凌晨320分,运行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)

wKioL1Xulm3SY07lAAFCbaqcwiM404.jpg

2、每周日凌晨230分,运行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)

wKiom1XulFXjrKjlAAEyPkP1V5k261.jpg

3、天天晚上12点,取得/proc/meminfo文件中全部以SM开头的行,追加至/statistics/meminfo.txt文件中,且天天的消息以前,要加上相似===============分隔线;

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

 wKioL1Xulo3QgvCrAAJBMVFFxhU037.jpg

相关文章
相关标签/搜索