Linux下的两种定时执行任务的方法:at命令,以及crontab服务
crontab
1、crontab 常用命令
cron服务提供 crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab -u root -l
2、命令格式
基本格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
3、案例
实例1:每1分钟执行一次myCommand
* * * * * myCommand
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
at
at一般是临时任务,crontab一般是周期性任务
at格式:
at #执行的时间#
at->#执行的任务脚本#
at->#执行的任务脚本#
at->
案例
1、使用相对时间执行命令
1 [root@Process-Mod ~]# ls 2 anaconda-ks.cfg 3 [root@Process-Mod ~]# at now + 1min //一分钟后执行 4 at> date >> date.txt 5 at> <EOT> 6 job 8 at Sat Dec 28 04:03:00 2019 7 [root@Process-Mod ~]# date 8 Sat Dec 28 04:02:33 CST 2019 9 [root@Process-Mod ~]# at -l //当前执行的计划任务 10 8 Sat Dec 28 04:03:00 2019 a root 11 [root@Process-Mod ~]# ls 12 anaconda-ks.cfg date.txt 13 [root@Process-Mod ~]# more date.txt //已经把当前信息导入 14 Sat Dec 28 04:03:00 CST 2019
2、使用绝对时间执行命令
1 [root@Process-Mod ~]# at 04:07 2 at> ls / >>ls.txt 3 at> <EOT> 4 job 10 at Sat Dec 28 04:07:00 2019 5 6 [root@Process-Mod ~]# atq //和at -l 功能一致 7 10 Sat Dec 28 04:07:00 2019 a root 8 9 [root@Process-Mod ~]# date 10 Sat Dec 28 04:07:09 CST 2019 11 [root@Process-Mod ~]# ls 12 anaconda-ks.cfg date.txt ls.txt 13 [root@Process-Mod ~]# more ls.txt 14 bin 15 boot 16 dev 17 etc 18 home 19 lib 20 lib64 21 media 22 mnt 23 opt 24 proc 25 root 26 run 27 sbin 28 srv 29 sys 30 tmp 31 usr 32 var
3、删除无用的计划任务
1 [root@Process-Mod ~]# at now + 20min 2 at> ls > a.txt 3 at> <EOT> 4 job 11 at Sat Dec 28 04:28:00 2019 5 [root@Process-Mod ~]# at now + 22min 6 at> date > datebn.txt 7 at> <EOT> 8 job 12 at Sat Dec 28 04:31:00 2019 9 [root@Process-Mod ~]# at now + 23min 10 at> date 11 at> <EOT> 12 job 13 at Sat Dec 28 04:32:00 2019 13 [root@Process-Mod ~]# at -l //可以看到已经添加3条计划任务 14 11 Sat Dec 28 04:28:00 2019 a root 15 12 Sat Dec 28 04:31:00 2019 a root 16 13 Sat Dec 28 04:32:00 2019 a root 17 18 使用atrm 可以删除 计划任务 19 [root@Process-Mod ~]# atrm 11 20 [root@Process-Mod ~]# at -l //11已经被删除 21 12 Sat Dec 28 04:31:00 2019 a root 22 13 Sat Dec 28 04:32:00 2019 a root
常见问题
计划任务服务
Can't open /var/run/atd.pid to signal atd. No atd running?
[root@Process-Mod ~]# systemctl start atd
[root@Process-Mod ~]# systemctl status atd