• Linux Crontab 定时任务


    一:安装

    ubuntu安装

    apt-get install cron
    
    • 1

    Centos安装

    yum install vixie-cron
    yum install crontabs
    
    • 1
    • 2

    二:启动

    启动服务 
    service crond start 
    关闭服务 
    service crond stop 
    重启服务 
    service crond restart 
    重新载入配置
    service crond reload 
    查看状态
    service crond status 
    设置开机自动启动crond服务:
    chkconfig crond on 
    开机级别的crond服务运行情况 ,2、3、4、5级别开机会自动启动crond服务 
    chkconfig –list crond 
    取消开机自动启动crond服务
    chkconfig crond off
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    三: 执行脚本(两种)

    1.在命令行输入

    # 添加相应的任务,wq存盘退出。具体含义之后介绍
    crontab -e # 配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务
    # 列出当前的所有调度任务 
    crontab -l 
    # 列出用户jp的所有调度任务
    crontab -l -u jp 
    # 删除所有任务调度工作
    crontab -r 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.编辑文件
    直接编辑/etc/crontab 文件,即 vi /etc/crontab,添加相应的任务。

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    
    # For details see man 4 crontabs
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
      * * * * * user-name command to be executed
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    前四行是有关设置cron任务运行的环境变量。

    • SHELL:变量的值指定系统使用的SHELL环境(该样例为bash shell),

    • PATH:变量定义了执行命令的路径。

    • MAILTO: Cron的输出以电子邮件的形式发给MAILTO变量定义的用户名。如果MAILTO变量定义为空字符串(MAILTO=“”),电子邮件不会被发送。

    • HOME: 执行命令或脚本时HOME变量可用来设置基目录

    四:命令详解

    格式:

    crontab [-u user] file
    crontab [ -u user ] [ -i ] { -e | -l | -r }
    
    • 1
    • 2

    -u user:用于设定某个用户的crontab服务;
    file: file为命令文件名,表示将file作为crontab的任务列表文件并载入crontab;
    -e:编辑某个用户的crontab文件内容,如不指定用户则表示当前用户;
    -l:显示某个用户的crontab文件内容,如不指定用户则表示当前用户;
    -r:从/var/spool/cron目录中删除某个用户的crontab文件。
    -i:在删除用户的crontab文件时给确认提示。
    分钟 小时 日 月 星期 命令

    五:配置实例

    分钟级别 不需要?的

    每一分钟执行一次command(因cron默认每1分钟扫描一次,因此全为*即可)
    
    * * * * *  command
    每小时的第3和第15分钟执行command
    
    3,15 * * * * command
    每天上午8-11点的第3和15分钟执行command:
    
    3,15 8-11 * * * command
    每隔2天的上午8-11点的第3和15分钟执行command:
    
    3,15 8-11 */2 * * command
    每个星期一的上午8点到11点的第3和第15分钟执行command
    
    3,15 8-11 * * 1 command
    每晚的21:30重启smb
    
    30 21 * * * /etc/init.d/smb restart
    每月1、10、22日的4 : 45重启smb
    
    45 4 1,10,22 * * /etc/init.d/smb restart
    每周六、周日的1 : 10重启smb
    
    10 1 * * 6,0 /etc/init.d/smb restart
    每天18 : 00至23 : 00之间每隔30分钟重启smb
    
    0,30 18-23 * * * /etc/init.d/smb restart
    每一小时重启smb
    
    * */1 * * * /etc/init.d/smb restart
    晚上11点到早上7点之间,每隔一小时重启smb
    
    * 23-7/1 * * * /etc/init.d/smb restart
    每月的4号与每周一到周三的11点重启smb
    
    0 11 4 * mon-wed /etc/init.d/smb restart
    每小时执行/etc/cron.hourly目录内的脚本
    
    0 1 * * * root run-parts /etc/cron.hourly
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    支持秒 星期和day可以同时设置的

    等待补充

    支持秒 需要?的(day和星期不能同时)

    多命令

    #crontab执行
    0 5 0 * * 2 (export CI_ENV=testing && /usr/local/bin/php /home/q/system/safe-cactus/application/script/crontab/CalHardWareCount.php &>> /tmp/CalHardWareCount.php.log) 
    
    #docker的命令
    0 5 0 * * 2 (docker exec cactus-web /bin/bash -c 'export CI_ENV=production; /usr/local/bin/php /home/q/system/safe-cactus/application/script/crontab/CalHardWareCount.php &>> /tmp/CalHardWareCount.php.log') 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    六:使用

    1. 启动cron
    service crond start
    
    2. cron帮助命令
    man crontab
    
    3. 查看cron任务
    crontab -l
    注: 刚开始添加暂无内容
    
    5. 编辑cron任务
    crontab -e
    
    删除cron任务 使用下面的命令移除已经计划的cron作业
    crontab -r
    使用下面的命令移除所有已计划的cron作业,且无需再次确认。
    crontab -ir
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    日期设置格式

    待补充

    其他

    • 不同版本的解析crontab器有区别。
      有的支持秒。
      有的星期和day不能同时设置(*和?的区别)。

    • 直接crontab好像不能使用 得-e加到文件里

    • docker中可能会出问题 需要先杀掉crontab进程 再启动

    • 请先网上找个crontab验证的 看一看执行时间是否符合预期

  • 相关阅读:
    一文读懂 C++11 中的匿名函数(也称lambda函数、lambda表达式)
    赋能借壳上市
    LeetCode算法题解|LeetCode738. 单调递增的数字、LeetCode968. 监控二叉树
    生产环境元空间内存溢出(OOM)的问题排查
    [AUTOSAR][诊断管理][ECU][$22] 读取相关的数据
    超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)
    源码安装部署drbd9
    Spring常见的注解
    神经网络图像识别技术,神经网络指纹识别
    org.activiti.bpmn
  • 原文地址:https://blog.csdn.net/S_ZaiJiangHu/article/details/126041159