linux任务计划

LUOPING0 2019-12-11

任务计划

1、在未来的某个时间点执行一次某任务;
at
batch
2、周期性执行;
cron

at用法

at 时间
at> COMMAND
at> Ctrl+d

指定时间:
绝对时间:HH:MM、DD.MM.YY、MM/DD/YY;   #未来的时间
相对时间:now+minutes,hours,days,weeks;
模糊时间:midnight(午夜12点),noon(中午12点),teatime(下午4点);
命令的执行结果,将以邮件的形式发送给安排任务的用户;

[ ~]# at -l     #列出任务列表
1	2019-12-12 10:00 a root    #a表示队列
[ ~]# at -d JOB_ID    #删除某个任务

batch

自动选择系统空闲时间执行任务;不需要指定时间,其余格式和at相同

at的黑白名单

/etc/at.allow
/etc/at.deny
如果两个文件都存在,/etc/at.allow生效;如果两个文件都不生效,只允许root用户使用at

cron

cron:自身是一个不间断运行的服务;如果任务因为服务器故障造成越过时间点,将不会再执行;
anacron:cron的补充;能够实现cron因为各种原因在过去的该执行而未执行的任务在恢复正常后执行一次;

cron:
系统cron任务:定义在/etc/crontab
格式:分钟  小时  天  月  周  用户  任务

用户cron任务:定义在/var/spool/cron/USERNAME
格式:分钟  小时  天  月  周  任务

时间的有效取值:
分钟:0——59
小时:0——23
天:1——31
月:1——12
周:0——7,0和7都表示周日

时间通配表示:
*:对应的所有有效取值(每);
Example:
3 * * * * :每小时的第3分钟
3 * * * 7:每周日每小时的第3分钟
13 12 * * *:每天的12点13分 
13 12 * * 5:每周五的12点13分
13 12 6 * *:每月6号的12点13分
13 12 6 * 3:每月6号如果是周三,那么在12点13分执行;几号和周几一般不同时使用;
13 12 6 7 *:每年的7月6号12点13分

,:离散时间点;
Example:
10,40 * * * *:每小时的第10分和第40分钟;每半小时的任务
10,40 * * * 2,5:每周二和每周五每小时的第10分和第40分执行
10,40 2 * * 2,5:每周二和每周五凌晨2点的第10分和第40分执行

-:连续时间点:
Example:
10 02 * * 1-5:每周一到周五的2点10分

/#:对应取值范围内每多久一次:
Example:
*/3 * * * *:每3分钟

注意:
08 */2 * * *:每两小时的第8分钟执行一次;千万不能写成* */2 * * *,这个相当于每分钟都执行!!!
10 04 */2 * *:每两天执行一次;也千万不要写成* * */2 * *,这个也相当于每分钟都执行一次!!!

执行结果将以邮件形式发送给管理员;如果不想要邮件,使用:
*/3 * * * * /bin/cat /etc/fstab > /dev/null;把对的结果都扔到数据黑洞,错误的结果发生邮件

cron的环境变量

cron执行的所有命令都去PATH环境变量指定路径寻找;
但如果用户没登录,是没有PATH环境变量的,所以cron会去/bin:/sbin:/usr/bin:/usr/sbin寻找;
所以在cron中的命令都使用绝对路径;
如果执行脚本的话,不需要在cron中指定路径,需要在脚本中指定PATH路径,如下:
#!/bin/bash
export PATH=

用户任务的管理

不建议直接使用vim编辑用户任务的文件;使用crontab工具自带语法检查功能;

[ ~]# crontab -l       #列出任务
[ ~]# crontab -e       #定义用户任务
[ ~]# crontab -r       #移除所有任务
[ ~]# crontab -u USERNAME -e     #给其他用户定义用户任务

anacron

配置文件:/etc/anacrontab

#period in days   delay in minutes   job-identifier   command       #第4个字段
1	5	cron.daily		nice run-parts /etc/cron.daily   
1:表示过去一天没执行的任务
5:表示开机后的第5分钟执行

注意

要确保cron计划任务能够正常执行,需要确保cron服务是正常启动的;
[ ~]# systemctl status crond         #cron默认是在服务器上的,所以默认是启动的
anacron默认是放在笔记本上的,所以服务默认是关闭的

相关推荐