美文网首页
『学了就忘』Linux系统管理 — 9.crontab命令循环执

『学了就忘』Linux系统管理 — 9.crontab命令循环执

作者: 繁华似锦Fighting | 来源:发表于2020-07-26 00:11 被阅读0次

    需使用crontab命令。

    crontab命令可以循环执行定时任务。比如每天的凌晨2点都执行一次某个任务。

    cron服务是Linux系统自带的守护进程(daemon),用来重复运行某些被设定好了确定的运行时间的任务,这些任务可以是每个月运行、每周运行、每天运行,甚至是每一分钟运行。

    在Linxu系统中,有三种用于任务调度的工具

    • at命令调用atd服务。
    • crontab命令调用cron(crond)服务。
    • anacron工具。

    1、crond服务管理与访问控制

    crontab命令是需要crond服务支持的,crond服务同样是独立的服务,所以启动和自启动方法如下:

    # 重启动crond服务
    [root@localhost ~]# service crond restart
    停止 crond:                                [确定]
    正在启动 crond:                             [确定]
    
    
    # 设定crond服务为开机自启动
    [root@localhost ~]# chkconfig crond on
    

    提示:只要你的Linux系统是安装的,哪怕是最小化安装,at服务和cron服务默认都是启动的。

    2、crontab命令的访问控制

    crond服务默认是自启动的,如果服务器上有循环执行的系统定时任务,就不要关闭crond服务了。
    crontab命令和at命令类似,也是通过/etc/cron.allow/etc/cron.deny文件来限制某些用户是否可以使用crontab命令的,而且原则也非常相似:

    1. 当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高。
    2. 当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令。

    crontab命令规则基本和at命令的规则一直,同样/etc/cron.allow文件的优先级比/etc/cron.deny文件的优先级高,Linux 中默认只有/etc/cron.deny文件。

    3、用户级别的crontab命令

    (1)crontab命令介绍

    cron服务提供crontab命令来设定cron服务的,

    也就是使用crontab命令的方式实现cron定时任务。

    每个用户都可以实现自己的crontab定时任务,只要是使用用户身份执行crontab -e命令即可,当然这个用户不能加入/etc/cron.deny文件中。

    也就是说这种方式只能是,哪个用户定义的crontab定时任务,就由哪个用户来执行。

    crontab命令格式如下:

    [root@localhost ~]# crontab [选项]
    
    选项:
      -e:编辑crontab定时任务
      -l:查询crontab任务
      -r:删除当前用户所有的crontab任务,如果有多个任务,只想删除一个,可以用“crontab -e”
      -u用户名:修改或删除其他用户的crontab任务。只有root可用。
    

    示例:

    # 进入crontab编辑界面。
    # 会打开一个空的文本文件,是一个vim编辑界面。
    # 在vim中编写你的工作。
    [root@localhost ~]# crontab -e
    
    # 编辑的内容
    *****执行的任务
    
    

    提示:任务可以是单一的执行命令,单一的命令所能完成的工作是比较少的,一般在工作中都是使用执行脚本。

    内容含义说明:

    项目 含义 范围
    第一个”*“ 一小时当中的第几分钟 0-59
    第二个”*“ 一天当中的第几小时 0-23
    第三个”*“ 一个月当中的第几天 1-31
    第四个”*“ 一年当中的第几月 1-12
    第五个”*“ 一周当中的星期几 0-7(0和7都代表星期日)

    时间的表达式中,还有一些特殊符号:

    特殊符号 含义
    * 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
    , 代表不连续的时间。比如0 8,12,16 * * * 所要执行的命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令。
    - 代表连续的时间范围。比如0 5 * * 1-6 所要执行的命令,代表在周一到周六的凌晨5点0分执行命令。
    */10 代表每隔多久执行一次。比如*/10 * * * * 所要执行的命令,代表每隔10分钟就执行一遍命令。

    时间表达式示例:

    时间 含义
    10 * * * * 所要执行的命令 每小时的第10分钟执行一次命令
    45 22 * * * 所要执行的命令 在22点45分执行命令
    0 17 * * 1 所要执行的命令 每周1的17点0分执行命令
    0 5 1,15 * * 所要执行的命令 每月1日和15日的凌晨5点0分执行命令
    40 4 * * 1-5 所要执行的命令 每周一到周五的凌晨4点40分执行命令
    */10 4 * * * 所要执行的命令 每天的凌晨4点,每隔10分钟执行一次命令
    0 0 1,15 * 1 所要执行的命令 每月1日和15日,每周1的0点0分都会执行命令。<br />日和星期不是并且的关系,是或者的关系。

    注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱。

    在举一个特例:

    0 6 31 * * 所要执行的命令,不一定每个月都有31日,在没有31日的月份就不执行。在做定时任务的时候,最后不要选这么极端的时间。

    crontab命令定时任务示例:

    • 让系统每隔1分钟,就向/tmp/test文件中写入一行“12345”,验证一下系统定时任务是否会执行。

      [root@localhost ~]# crontab -e
      
      # 进入vim编辑界面
      * * * * * /bin/echo "12345" >> /tmp/test
      
    • 系统在每周二的凌晨5点05分重启一次

      [root@localhost ~]# crontab -e
      
      # 进入vim编辑界面
      5 5 * * 2 /sbin/shutdown -r now
      

      提示:不建议用定时任务执行服务器重启,有可能出现服务器没有重新启动的情况。服务器的重启操作最好还是需要管理员参与。

    • 在每月的1号,10号,15号的凌晨3点30分都定时执行日志备份脚本autobak.sh

      [root@localhost ~]# crontab -e
      
      # 进入vim编辑界面
      30 3 1,10,15 * * /root/sh/autobak.sh
      

      这个操作常用。

    (2)查看crontab任务

    查看root用户的crontab任务。

    [root@localhost ~]# crontab -l
    * * * * * /bin/echo "12345" >> /tmp/test
    

    (3)删除crontab任务

    删除root用户所有的定时任务。

    [root@localhost ~]# crontab -r
    

    提示:如果只想删除某一个定时任务,需要进入crontab -e编辑模式手工删除。

    相关文章

      网友评论

          本文标题:『学了就忘』Linux系统管理 — 9.crontab命令循环执

          本文链接:https://www.haomeiwen.com/subject/gqkclktx.html