zoukankan      html  css  js  c++  java
  • Crontab 的使用

    crontab 用于设置定时任务,通过 cat /etc/crontab 可查看 crontab 示例:

    $ cat /etc/crontab 
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # 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

    根据输出可知,该命令分三部分,

    • * 设置的循环周期
    • user-name 指定运行该任务的身份
    • 最后一部分是需要运行的脚本路径或具体的命令

    身份

    期中以什么身份运行脚本,可通过 crontab-u 参数指定,

    $ sudo crontab -u user001 -e

    上述命令将以 user001 的身份创建并运行 job。

    也可以直接编辑 /etc/crontab 文件,该文件中可指定 username:

    1 1 * * * user001 user001 /data/home/user001/test.sh

    job 的管理

    • crontab -e: 编辑或创建 job,配合 -u 可操作指定用户的 job
    • crontab -l: 列出 job,配合 -u 参数可查看指定用户的 job
    • crontab -r: 删除 job 文件,慎用,没有确认过程直接就删了
    • crontab -i: 同 -r,但删除前会先确认

    循环周期

    5 个 * 的位置分别代表了不同时间单位,由左至右依次为,

    • 分,取值范围 0 ~ 59
    • 时,0 ~23
    • 天,1 ~ 31
    • 月,1 ~ 12,部分实现支持使用名称 jan,feb,mar,…
    • 星期,0 ~ 6,其中星期天为 0,部分实际支持使用名称,sun, mon, tue…

    所以如下格式:

    30 5 11 12 * echo "hello"
    

    表示 “12 月 11 日的 5:30” 打印 “hello”。

    特殊符号

    *

    期中,* 代表该位置时间单位下所有可取的值,比如第一个位置代表分,指定为 * 时就是每分钟都执行。

    所以五个星 * * * * * 表示每分钟。

    ,

    指定多个值时用于逗号分隔,

    0,15,30 * * * *
    

    表示当时间为 0,15 或 30 分钟的时候执行。

    -

    连字符用于指定范围,

    0-15,30 * * * *
    

    表示 0~15 之间的每分钟,以及第 30 分钟的时候执行。

    /

    除号用于设置重复的间隔,

    */15 * * * *
    

    表示每个一刻钟的时候,即 0,15,30,45 这些时刻。

    它与 15 * * * * 的区分是后者表示一个值,即 15min 的时候,13:15, 12:15 这些。

    非标准的字符串

    还有一些方便的预设关键字,但这些都是非标准的,不同机器支持情况不同。

    EntryDescriptionEquivalent to
    @yearly (or @annually) 每年一月午夜 0 0 1 1 *
    @monthly 每月首日午夜 0 0 1 * *
    @weekly 每周天午夜 0 0 * * 0
    @daily (or @midnight) 每天午夜 0 0 * * *
    @hourly 每小时 0 * * * *
    @reboot 重启时 N/A

    示例:重启后启动 redis

    @reboot /usr/local/bin/redis-server /path/to/redis.conf

    一些示例

    每分钟打印日期到指定文件,

    • crontab -e 打开 job 编辑界面
    • 输入 */1 * * * * date >> /data/home/wayongliu/foo.txt 然后 :wq 保存退出
    • tail -f /data/home/wayongliu/foo.txt` 查看结果

    实现每隔多少秒执行

    因为能设置的最小时间单位为分,需要设置每隔多少秒执行时,就需要变通来实现。

    借助 sleep,可不用 crontab, 比如每 5 秒:

    #!/bin/bash
    while true
    do
     /home/user/myscript.sh
     sleep 5
    done

    也可以 sleep 与 crontab 结合来用,考虑到每 5 秒,一分钟内即执行 12 次,可以设置 12 个 job:

    * * * * * /home/user/myscript.sh
    * * * * * sleep 5; /home/user/myscript.sh
    * * * * * sleep 10; /home/user/myscript.sh
    * * * * * sleep 15; /home/user/myscript.sh
    * * * * * sleep 20; /home/user/myscript.sh
    * * * * * sleep 25; /home/user/myscript.sh
    * * * * * sleep 30; /home/user/myscript.sh
    * * * * * sleep 35; /home/user/myscript.sh
    * * * * * sleep 40; /home/user/myscript.sh
    * * * * * sleep 45; /home/user/myscript.sh
    * * * * * sleep 50; /home/user/myscript.sh
    * * * * * sleep 55; /home/user/myscript.sh

    其中第一个任务会在每分钟开始时执行,
    第二个也是每分钟开始执行,不过会 sleep 5s,所以实际是每分钟每 5s 的时候执行,
    后面的任务类似,从而达到了需要的效果。

    相关资源

    The text was updated successfully, but these errors were encountered:

    CC BY-NC-SA 署名-非商业性使用-相同方式共享
  • 相关阅读:
    hdu4122
    poj3410单调队列(单调栈)
    hdu3415 单调队列模板题
    网站指纹识别工具Whatweb的使用
    Python中shodan模块的使用
    Shodan的使用
    Google Hacking的用法
    PyCharm调试程序
    Python脚本与Metasploit交互进行自动永恒之蓝攻击
    关于PHP动态的接收传递的GET,POST和COOKIE变量
  • 原文地址:https://www.cnblogs.com/Wayou/p/14722344.html
Copyright © 2011-2022 走看看