新随笔  :: 管理

linux定时任务 at 和crontab

Posted on 2019-12-27 20:13  SliverLee  阅读(313)  评论(0编辑  收藏  举报

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