zoukankan      html  css  js  c++  java
  • linux定时任务crontab详解

    image.png

    访问控制

    • 白名单 若存在/etc/cron.allow,只有该文件内的用户才能使用crontab
    • 黑名单 若存在/etc/deny,该文件内的用户不能使用crontab
    • 优先级 /etc/cron.allow > /etc/cron.deny

    常用选项

    • -e: 编辑任务
    • -l: 显示所有任务
    • -r: 删除当前用户的所有crontab任务

    服务管理

    $ systemctl status crond # 查看服务状态
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since Mon 2019-02-18 01:32:37 CST; 13h ago
     Main PID: 1598 (crond)
       CGroup: /system.slice/crond.service
               └─1598 /usr/sbin/crond -n
    
    $ sudo systemctl start crond # 启动服务
    $ sudo systemctl stop crond # 停止服务

    根据cron的日志实时查看执行情况

    $ sudo tail -f /var/log/cron

    时间选项说明

    五个*号

    crontab 由 五个 * 定义任务的执行时间,具体含义为:

    *号

    含义

    范围

    第1个

    1小时中的第几分钟

    0-59

    第2个

    1天中的第几小时

    0-23

    第3个

    1个月中的第几天

    1-31

    第4个

    1年中的第几月

    1-12

    第5个

    1周中的星期几

    0-7(0和7都代表星期日)

    特殊符号

      • 表示任何时间,如第1个 * 表示1小时中的每分钟都执行一次
    • , 表示不连续时间,如0 8,12,16 * * *表示每天的8点0分,12点0分,16点0分执行一次命令
      • 表示连续的时间范围,如0 5 * * 1-6,表示周一至周六的凌晨5点0分执行命令

    具体示例

    • 45 22 * * * 22点45分执行
    • 0 17 * * 1 每周一的17点0分执行
    • 0 5 1,15 * * 每月1号和15号的凌晨5点0分执行
    • 40 4 * * 1-5 每周一至周五的凌晨4点40分执行

    注意:星期几与几号不要同时出现

    0 0 1,15 * 1 表示的是:每月1号和15号的0点0分执行,每周一的0点0分执行。两者是或的关系,但不要有这种写法,很容易产生歧义

    系统的定时任务

    crontab -e表示每个用户以自己的身份执行自己的定时任务。除此之外,还可以通过/etc/crontab这个配置文件指定任务

    用系统配置的方式执行定时任务,有两种方式:

    • 第一种:将需要定时执行的脚本放到 `/etc/cron.{daily,weekly,monthly}/目录中
    $ ls /etc | grep cron
    anacrontab
    cron.d
    cron.daily
    cron.deny
    cron.hourly
    cron.monthly
    crontab
    cron.weekly
    $ sudo cat /etc/anacrontab # 用于管理
    # /etc/anacrontab: configuration file for anacron
    
    # See anacron(8) and anacrontab(5) for details.
    
    SHELL=/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    # the maximal random delay added to the base delay of the jobs
    RANDOM_DELAY=45
    # the jobs will be started during the following hours only
    START_HOURS_RANGE=3-22
    
    #period in days   delay in minutes   job-identifier   command
    1   5   cron.daily      nice run-parts /etc/cron.daily
    7   25  cron.weekly     nice run-parts /etc/cron.weekly
    @monthly 45 cron.monthly        nice run-parts /etc/cron.monthly
    • 第二种:修改/etc/crontab配置文件
    $ cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin # 由此可知,crontab是有自己的环境变量的,因此在crontab中要用绝对路径,shell中的PATH与crontab的PATH不一定相同
    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

    实际应用中,一般直接使用crontab -e的方式来处理更加常见

  • 相关阅读:
    你必须要知道的架构知识~第一章 什么是项目架构
    Linq下的distinct()比SQLServer下的distinct更强大,更自由,呵呵
    你必须要知道的架构知识~第二章 代码是否面向对象,要看你的继承怎么用
    hdu 4500 小Q系列故事——屌丝的逆袭
    [置顶] Android九环刀之RatingBar之评委请亮分
    DNS 解析出错导致 MySQL 无法连接
    把iis服务关掉,将Session值存到数据库中继续运行
    回顾过去。。展望未来
    Android巴士转发
    linux网络编程之socket(十二):select函数的并发限制和 poll 函数应用举例
  • 原文地址:https://www.cnblogs.com/panchanggui/p/14744145.html
Copyright © 2011-2022 走看看