• 【linux】定时任务讲解


    一. 在某时刻只执行一次:at

    1. 设置定时任务

    比如从现在开始,设置30分钟后自动关机,这时就可以使用at命令

    [root@localhost ~]# at now + 30 minutes
    at> /sbin/shutdown-h now
    at> <EOT>
    job 1 at 2012-11-06 23:39
    
    • 1
    • 2
    • 3
    • 4

    第一行是定义从现在开始算,30分钟后安排一个任务;
    第二行是到了时间后执行关机操作;
    第三行是 < EOT>,这不是使用键盘输入的,而是使用了组合键Ctrl+D,表示输入结束;
    第四行是系统提示有一个任务将在23:39被执行。

     
    使用at还可以安排在具体的时间执行任务,比如说在午夜12点实现自动关机,如下所示:

    [root@localhost ~]# at 00:00 2012-11-07
    at> /sbin/shutdown-h now
    at> <EOT>
    job 2 at 2012-11-07 00:00
    [root@localhost ~]# atq
    2       2012-11-07 00:00 a root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. 查看和删除定时任务

    可以使用atq命令查看当前使用at命令调度的任务列表,其中第一列是任务编号。

    也可以使用atrm删除已经进入任务队列的任务,再使用atq查询时,发现已经没有任务列表了,如下所示:

    [root@localhost ~]# atq
    1       2012-11-06 23:39 a root #查询at的任务队列,第一个数字代表该任务的标号
    
    [root@localhost ~]# atrm 1 #删除标号为1的任务
    
    • 1
    • 2
    • 3
    • 4

     

    二. 周期性执行任务:cron

    有一些任务是需要周期性执行的,比如说每天早晨的闹钟会在设定的时间准时响起。在Linux中,可以利用cron工具做这种设置。

    1. 启动crond进程

    首先需要确定crond进程在运行,如果没有运行,需要先启动该进程。

    [root@localhost ~]# service crond start
    Starting crond: [  OK  ]
    [root@localhost ~]# service crond status
    crond (pid  3257) is running...
    
    • 1
    • 2
    • 3
    • 4

     

    2. 编辑定时任务

    用户可通过crontab来设置自己的计划任务,并使用-e参数来编辑任务。进入编辑模式后,需要编辑执行的时间和执行的命令。

    *  *  *  *  * command
    
    • 1

    前面5个*可以用来定义时间,

    第一个 * 表示分钟,可以使用的值是1~59,每分钟可以使用/1表示;
    第二个 * 表示小时,可以使用的值是0~23;
    第三个 * 表示日期,可以使用的值是1~31;
    第四个 * 表示月份,可以使用的值是1~12;
    第五个 * 表示星期几,可以使用的值是0~6,0代表星期日;

    一些例子

    *  *  *  *  * service httpd restart
    */1  *  *  *  * service httpd restart
    #这两种写法其实是一致的,都是每分钟重启httpd进程。请注意,这只是一个例子,
    除非你有确定的目的,否则不要在实际生产环境中这么设置
    *  */1  *  *  * service httpd restart
    #每小时重启httpd 进程
    
    *  23-3/1  *  *  * service httpd restart
    #从23点开始到3点,每小时重启httpd 进程
    
    30 23 *  *  * service httpd restart
    #每天晚上2330分重启httpd进程
    
    30 23 1  *  * service httpd restart
    #每月的第一天晚上2330分重启httpd进程
    
    30 23 1  1  * service httpd restart
    #每年11日的晚上2330分重启httpd进程
    
    30 23 *  *  0 service httpd restart
    #每周日晚上2330分重启httpd进程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

     

    3. 查看和删除

    设置完成后,可以使用crontab -l查看设置的任务,也可以使用crontab -r删除所有的任务,如下所示:

    [root@localhost ~]# crontab -l
    30 23 *  *  0 service httpd restart
    [root@localhost ~]# crontab -r
    [root@localhost ~]# crontab -l
    no crontab for root
    
    • 1
    • 2
    • 3
    • 4
    • 5

     

    4. 用户权限

    4.1. 黑名单

    如果由于特殊的原因需要禁止某些用户使用这个功能,可以将该用户的用户名添加至/etc/cron.deny中。

     

    4.2指定用户

    普通用户只可以设置、查看、删除自己的计划任务,root可以使用-u参数查看指定用户的任务。
    比如root可以查看用户john的任务列表:

    [root@localhost ~]# crontab -u john -l
    
    • 1

     

    三. /etc/crontab的管理

    系统也有自己的例行任务,而其配置文件是/etc/crontab。看一下这个文件的内容:

    [root@localhost ~]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    
    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

     

  • 相关阅读:
    有效降低数据库存储成本方案与实践 | 京东云技术团队
    基于Laravel封装一个强大的请求响应日志记录中间件
    GUI自动化测试工具Sikulix的安装和使用
    【WSN通信】基于最佳簇半径的无线传感器网络分簇路由算法附matlab代码
    01 【Nginx的安装和启动】
    二叉树:有了如此高效的散列表,为什么还需要二叉树?
    Etcd 概要 机制 和使用场景
    软件测试面试题:您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容?
    信息论基础(Part2)
    道可云元宇宙每日资讯|中国移动启动算网大脑“天穹”全网试商用
  • 原文地址:https://blog.csdn.net/hiliang521/article/details/132652449