Linux任务计划

任务计划

1     Linux任务计划、周期性任务执行 
2         未来的某时间点执行一次任务 
3             at 指定时间点,执行一次性任务 
4             batch 系统自行选择空闲时间去执行此处指定的任务 (不常用)
5         周期性运行某任务 
6             cron 

任务计划创建之at

 1 at任务 
 2     包:at 
 3     at命令:at [option] TIME 
 4     常用选项: 
 5         -V 显示版本信息 
 6         -t time 时间格式 [[CC]YY]MMDDhhmm[.ss] 
 7         -l 列出指定队列中等待运行的作业;相当于atq 
 8         -d 删除指定的作业;相当于atrm 
 9         -c 查看具体作业任务 
10         -f /path/file 指定的文件中读取任务 
11         -m 当任务被完成之后,将给用户发送邮件,即使没有标准输出
12             -m是即使没有标准输出,计划任务执行完了也会发送邮件
13     注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户 
14     TIME:定义出什么时候进行 at 这项任务的时间 
15         HH:MM [YYYY-mm-dd] 
16         noon(中午), midnight(午夜), teatime(4pm)(下午茶) 
17         tomorrow 
18         now+#{minutes,hours,days, OR weeks} 
19         +10minutes:十分钟后执行
20 例:创建一次性任务,以邮件方式查看
21     [root@centos6 ~]#at 11:35
22     at> date
23     at> ls /root
24     at> echo 123123
25     at> <EOT>        输入命令后Ctrl+d键退出
26     job 2 at 2019-09-09 11:35
27     [root@centos6 ~]#at -l
28     2       2019-09-09 11:35 a root    
29   也支持输入重定向方式
30     at 12:00 << EOF
31         echo 123
32         echo 354
33         EOF
34 at时间格式 
35     HH:MM  02:00 
36         在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务 
37     HH:MM YYYY-MM-DD   02:00 2016-09-20 
38         规定在某年某月的某一天的特殊时刻进行该项任务 
39     HH:MM[am|pm] [Month] [Date] 
40         04pm March 17 
41         17:20 tomorrow 
42     HH:MM[am|pm] + number [minutes|hours|days|weeks] 
43         在某个时间点再加几个时间后才进行该项任务 
44         now + 5 min  
45         02pm + 3 days 
46 at任务 
47     执行方式: 
48         1)交互式 2)输入重定向 3)at –f 文件 
49     依赖与atd服务,需要启动才能实现at任务 
50     at队列存放在/var/spool/at目录中 
51     /etc/at.{allow,deny}控制用户是否能执行at任务 
52         白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令 
53         黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在
54         添加黑名单之后该用户将不能创建计划任务,按时该用户之前创建的计划任务
55         是可以执行的
56         这两个文件的优先级顺序是这样的,当一个用户区创建计划任务先看有没有
57         /etc/at.allow ,如果有看文件中有没有这个用户如果有就可以执行,如果没有
58         就会拒绝。如果/etc/at.allow文件不存在就会看/etc/at.deny文件如果有就会
59         被拒绝,如果没有将默认允许
60     at.deny 文件中的使用者则可执行 
61         如果两个文件都不存在,只有 root 可以执行 at 命令 

任务计划创建之cron

 1 周期性任务计划cron 
 2     周期性任务计划:cron 
 3     相关的程序包: 
 4         cronie:主程序包,提供crond守护进程及相关辅助工具 
 5         在主程序包中包含一个服务/usr/lib/systemd/system/crond.service
 6         这个服务必须处于启用的状态计划任务才能进行执行
 7         cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如
 8     cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次
 9     此任务 
10         crontabs:包含CentOS提供系统维护任务 
11 计划任务 
12     确保crond守护处于运行状态: 
13         CentOS 7: 
14             systemctl status crond 
15         CentOS 6: 
16             service crond status 
17     计划周期性执行的任务提交给crond,到指定时间会自动运行 
18         系统cron任务:系统维护作业 
19             /etc/crontab 
20         用户cron任务: 
21             crontab命令 
22     日志:/var/log/cron 
23 计划任务 
24     系统cron任务:/etc/crontab 
25     注释行以  #  开头 
26     详情参见  man  5  crontab  
27         # Example of job definition: 
28         # .---------------- minute (0 - 59) 
29         # | .------------- hour (0 - 23) 
30         # | | .---------- day of month (1 - 31) 
31         # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 
32         # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 
33         # | | | | | 
34         # * * * * * user-name command to be executed 
35     例如:晚上9点10分运行echo命令 
36         10 21 * * * wang /bin/echo "Howdy!" 
37     */10 *  *  *  *  root   /data/bin/checkdisk.sh    :每隔十分中就检查一次磁盘;*号表示每的意思,
38                                                     */10表示每10分钟,其他的都是每小时,每天,每月
39      30  2 1,10,20 *  0  root  /data/check_disk.sh    :如果天和周都有定义,就是或的关系,这个例子是1,
40                                                      10,20号和周日的2点30分执行命令,如果想要1,10,2041                                                      并且是周日在执行,那就在脚本里写一个判断语句,
42                                                      date +%w判断是周几,返回的是数字
43      30  2  * 3-6,12  *  root  /bin/cat /var/log/messages    :3到6月和12月的每天2点30分以root用户
44                                                              身份执行命令
45      任务计划中的命令必须是命令的绝对路径,一般情况都是编辑好脚本,这里写脚本的绝对路径运行脚本的
46 计划任务 
47     时间表示法: 
48         (1) 特定值 
49             给定时间点有效取值范围内的值 
50         (2) * 
51             给定时间点上有效取值范围内的所有值 
52             表示“每...” 
53         (3) 离散取值 
54             #,#,# 
55         (4) 连续取值 
56             #-# 
57         (5) 在指定时间范围上,定义步长 
58             /#: #即为步长 
59 时间格式 
60     @reboot Run once after reboot :下次重启执行
61     @yearly 0 0 1 1 * :每天
62     @annually 0 0 1 1 * 
63     @monthly 0 0 1 * * :每月
64     @weekly 0 0 * * 0 
65     @daily 0 0 * * * 
66     @hourly 0 * * * * 
67     示例:每3小时echo和wall命令 
68         0 */3 * * * centos /bin/echo “howdy”;  wall “welcome to Magedu!69 计划任务 
70     系统的计划任务: 
71         /etc/crontab 配置文件 
72         /etc/cron.d/ 配置文件 
73         /etc/cron.hourly/ 脚本 
74         /etc/cron.daily/ 脚本 
75         /etc/cron.weekly/ 脚本 
76         /etc/cron.monthly/ 脚本 
77 用户计划任务 
78     crontab命令定义 
79         每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME 
80     crontab命令: 
81         crontab [-u user] [-l | -r | -e] [-i] 
82         -l 列出所有任务 
83         -e 编辑任务 
84         -r 移除所有任务 
85         -i 同-r一同使用,以交互式模式移除指定任务 
86         -u user 仅root可运行,指定用户管理cron任务 :指定是那个用户的计划任务
87     控制用户执行计划任务: 
88         /etc/cron.{allow,deny} 
89 at和crontab 
90     一次性作业使用 at 
91     重复性作业使用crontab 
92         Create at time crontab -e 
93         List at -l crontab -l 
94         Details at -c jobnum crontab -l 
95         Remove at -d jobnum crontab -r 
96         Edit N/A crontab -e 
97     没有被重定向的输出会被邮寄给用户 
98     root能够修改其它用户的作业
99  

计划任务的实例

 112:01 a.m 运行,即每天凌晨过一分钟。这是一个恰当的进行备份的时间,因为此时系统负载不大。
 2     1 0 * * * /root/bin/backup.sh
 3 每个工作日(Mon – Fri) 11:59 p.m 都进行备份作业。
 4     59 11 * * 1,2,3,4,5 /root/bin/backup.sh
 5 下面例子与上面的例子效果一样:
 6     59 11 * * 1-5 /root/bin/backup.sh
 7 每5分钟运行一次命令
 8     */5 * * * * /root/bin/check-status.sh
 9 每个月的第一天 1:10 p.m 运行
10     10 13 1 * * /root/bin/full-backup.sh
11 每个工作日 11 p.m 运行。
12     0 23 * * 1-5 /root/bin/incremental-backup.sh
13     30 21 * * * /usr/local/etc/rc.d/lighttpd restart
14 上面的例子表示每晚的21:30重启apache。
15     45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
16 上面的例子表示每月1、10、22日的4 : 45重启apache。
17     10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
18 上面的例子表示每周六、周日的1 : 10重启apache。
19     0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
20 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
21     0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
22 上面的例子表示每星期六的11 : 00 pm重启apache。
23     * */1 * * * /usr/local/etc/rc.d/lighttpd restart
24 每一小时重启apache
25     * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
26 晚上11点到早上7点之间,每隔一小时重启apache
27     0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
28 每月的4号与每周一到周三的11点重启apache
29     0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
30 #每天早上7点执行一次 /bin/ls :
31     0 7 * * * /bin/ls
3212 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup
33     0 6-12/3 * 12 * /usr/bin/backup
原文地址:https://www.cnblogs.com/yongbuyanbai0/p/11581844.html