zoukankan      html  css  js  c++  java
  • Linux之crontab命令


    Linux之crontab命令


    以下仅为本人工作、学习过程中所接触到的内容,不足之处请多包涵。

    简介

    crontab是用来定期执行程序的命令。crontab命令是cron table的简写,是cron的配置文件,也可以叫它作业列表。crontab 指令所设定的工作将会循环的一直执行下去,可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。让 crontab 可以生效的服务是 crond 服务。
    我们可以在以下文件夹内找到相关配置文件。

    • /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
    • /etc/crontab 这个文件负责调度各种管理和维护任务。
    • /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
    • 我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。

    Linux任务调度的工作主要分为以下两类:
    1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
    2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

    语法

    crontab [-u username] [ -l | -e | -r ]

    参数

    -u 只有 root 才能进行这个任务,帮其他使用者建立/移除 crontab 工作排程
    -e 编辑 crontab 的工作内容
    -l 查阅 crontab 的工作内容
    -r 移除所有的 crontab 工作内容,若仅要移除一项,用 -e 编辑
    -i 在删除用户的crontab文件时给出确认提示

    定时任务的编写

    使用crontab -e编辑定时任务,每项定时任务占据一行,每行的格式为:

    f1 f2 f3 f4 f5 program
    

    其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
    当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
    当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
    当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
    当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推

    *    *    *    *    *
    -    -    -    -    -
    |    |    |    |    |
    |    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
    |    |    |    +---------- 月份 (1 - 12) 
    |    |    +--------------- 一个月中的第几天 (1 - 31)
    |    +-------------------- 小时 (0 - 23)
    +------------------------- 分钟 (0 - 59)
    
    特殊字符 意义
    * 通配符,代表任何时刻都执行
    ,(逗号) 分隔时段,如果要下达的工作是 3:00 和 6:00 时,就会是: 0 3,6 * * * command
    - 一段时间范围内, 如,8 点到 12 点每小时的第 20 分都执行一项工作,命令为 20 8-12 * * * command
    /n n 代表数字,每隔 n 单位间隔时间,例如每五分钟执行一次,命令为 /5 * * * * command,/5 等价 0-59/5

    实例

    编辑当前用户的crontab

    crontab -e
    或
    vi /etc/crontab
    

    查看当前用户的crontab工作内容

    crontab -l
    或
    cat /etc/crontab
    

    查看指定用户的crontab工作内容

    crontab -l -u user.name
    

    定时任务实例

    从任务开始每隔一小时执行一次/root/test.sh

    // 错误写法,经测试,每分钟执行一次
    * */1 * * * sh /root/test.sh
    // 正确写法
    */60 * * * * sh /root/test.sh
    

    在 5 月 1 日 23:59 发一封信给指定人,邮件内容已经写在 /home/test.txt 中

    // crontab -e后,编辑如下内容
    59 23 1 5 * mail mailbox < /home/test.txt
    

    每5分钟执行一次/root/test.sh,crontab文件中添加如下一行

    */5 * * * * sh /root/test.sh
    // 如果不希望收到执行邮件,可改写为如下
    */5 * * * * sh /root/test.sh > /dev/null 2>&1
    

    每个星期的星期五16:30执行,crontab文件中添加如下一行

    30 16 * * 5 sh /root/test/sh
    

    每月每天每小时的第 0 分钟执行一次 /bin/ls

    0 * * * * /bin/ls
    

    在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup

    0 6-12/3 * 12 * /usr/bin/backup
    

    周一到周五每天下午 5:00 寄一封信给 alex@domain.name

    0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
    

    每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"

    20 0-23/2 * * * echo "haha"
    或
    20 */2 * * * echo "haha"
    

    参考

  • 相关阅读:
    Android 主题theme说明 摘记
    Android开发 去掉标题栏方法 摘记
    安卓项目五子棋代码详解(二)
    关于 ake sure class name exists, is public, and has an empty constructor that is public
    百度地图3.0实现图文并茂的覆盖物
    android onSaveInstanceState()及其配对方法。
    关于集成科大讯飞语音识别的 一个问题总结
    android 关于 webview 控制其它view的显示 以及更改view数据失败的问题总结
    C# 解析 json Newtonsoft果然强大,代码写的真好
    c#数据类型 与sql的对应关系 以及 取值范围
  • 原文地址:https://www.cnblogs.com/hai-feng/p/12441660.html
Copyright © 2011-2022 走看看