• linux基础服务,定时任务之crond


    linux下有两个定时执行服务,crond和atd。at针对仅运行一次的任务,或者开机后多少时间执行的任务。
     
    一、crond简介(centos6.5)
    crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
     
    Linux下的任务调度分为两类,系统任务调度和用户任务调度。
     
     
    系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件,这个就是系统任务调度的配置文件。
    /etc/crontab文件包括下面几行:
    [root@localhost ~]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=""HOME=/
    # run-parts
    51 * * * * root run-parts /etc/cron.hourly
    24 7 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
    
    前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。重启命令只能写在系统/etc/crontab中才能生效,个人crontab是不生效的。
     
    用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
    crontab -e 默认创建root用户的crontab文件,所以是相当于编辑 /var/spool/cron/root 
     
    指定用户创建定时任务,创建普通用户的定时任务,基于权限考虑,一些不需要root就可以执行的任务可以用普通用户创建。
    crontab -u 用户名 -e      #编辑指定用户的crontab任务
    crontab -u 用户名 -l      #查看指定用户的crontab任务
    

    二、crond服务

    /sbin/service crond start    //启动服务
    /sbin/service crond stop    //关闭服务
    /sbin/service crond restart //重启服务
    /sbin/service crond reload  //重新载入配置
    

    特殊符号含义
    * 代表每的意思,比如第一个*代表每分钟,第二个*代表每小时。
    , 代表不连续的时间,比如00  9,21  *  *  * 代表每天的9点和21点00分各执行一次。
    - 连续的时间范围, 比如 00,30  9-15  *  *  1-5  代表周一到周五的每天9点到15点之间,分别在00分和30分执行。
    */n 每隔多久执行一次,*/5   *  *  *  * ,每5分钟执行一次任务。

    定时任务脚本基本语法

    #print the hello
    * * * * * /bin/sh  /script/my.sh >/dev/null 2>&1
    
    最好写上/bin/sh,这样即使脚本忘记加X权限,也可以顺利执行。
    bash脚本要写全路径,不然crontab会搜索用户home目录下的同名文件。
    每个任务都应该添加注释,以方便自己或者别人查阅维护。
     
     
    三,实例
     
    *    *    *    *    *  command        
    每一分钟执行一次command(因cron默认每1分钟扫描一次,因此全为*即可)
     
    00,30  *    *    *    *  command
    每小时的第00和第30分钟执行command,也可以写成*/30 *    *    *   *
     
    3,15  8-11  */2  *   *  command
    每隔2天的上午8-11点的第3和15分钟执行command
     
    15,45  8-11   *   *  1 command
    每个星期一的上午8点到11点的第15和第45分钟执行command
     
    30  21   *   *  *   /etc/init.d/smb restart
    每晚的21:30重启smb
     
    45  4  1,10,22  *  *  /etc/init.d/smb restart
    每月1、10、22日的4 : 45重启smb
     
    10  1  *  *  6,0  /etc/init.d/smb restart
    每周六、周日的1 : 10重启smb
     
     
    0,30  18-23  *  *  *  /etc/init.d/network   restart
    每天18至23之间的00分和30分重启 network 
     
    0  1   *   *   *     /bin/sh  /script/aaa.sh
    每天1点整执行 aaa.sh
     
    0 11 4 * 1-5 /etc/init.d/smb restart
    这样写不规范,一般日和周不要同时使用,时间上会有不确定性。
     
    *  */1  *  *  *  /etc/init.d/smb restart
    每一小时重启smb?
    这样写是不对的,因为第一位分钟是*,所以此任务会每分钟执行一次,而不是每小时执行。
     
    四,备份和恢复
     
    crontab -l > $HOME/mycron  #备份crontab内容到home下的mycron
    crontab mycron                 #导入备份文件
    [root@centos68 ~]# crontab mycron
    [root@centos68 ~]#
    [root@centos68 ~]# crontab -l
    ....
    #start nginx after boot
    05 11 * * * /bin/sh /script/start_nginx.sh >/dev/null 2>&1
     
    #* */1 * * * echo $(date)'123' >/dev/pts/0
     
    */10 * * * * echo $(date +\%F-\%H-\%M) >/data/log
    
    注意事项:
    1:crond 服务默认每分钟检测是否有需要执行的任务,有的话就执行。
     
    2:对于秒级的任务crond无法实现。
    秒级任务可以通过shell脚本,然后加入sleep实现。
     
    #!/bin/bash
    while true
    echo 'hello word!' >>/tmp/a.log
    sleep 1  #间隔执行时间为1秒
    do
    done
     
    3:定时任务写在bash脚本里执行,不要直接在crontab里写命令。
    crontab 里%会有问题,所以date +%F带%号会有错误,写在bash里就没问题。
    可以在%号前加\%让系统识别。
     
    4:定时任务后加 >/dev/null 2>&1,取消结果输出到屏幕。
    如果确实需要保存日志,可以后面加 >/a.log 2>&1 将输出追加到指定文件。
     
    5:最好写上/bin/bash,这样即使脚本忘记加X权限,也可以顺利执行。
    sh脚本要写全路径,不然crontab会搜索用户home目录下的同名文件。
    每个任务都应该添加注释,以方便自己或者别人查阅维护等。
     
    6:crontab -e 默认是root用户的定时任务 /var/spool/cron/root
     
    有些定时任务不需要root那么高的权限的话,可以指定相关账户执行。
    crontab -u hsm -e
    编辑hsm用户的crontab定时任务。
    crontab -u hsm -l
    查看hsm用户的crontab定时任务。
     
    7:定时任务也可以写在/etc/crontab  里,不过这是系统的定时任务文件,一般不要写在这里面。
     
    8:环境变量不能直接在crontab里调用,一定要写在脚本里,使用前最好提前声明。在脚本里export 声明。
     
     
  • 相关阅读:
    CodeForces979D:Kuro and GCD and XOR and SUM(Trie树&指针&Xor)
    HDU4188:RealPhobia (连分数的运用之一)
    从HDU2588:GCD 到 HDU5514:Frogs (欧拉公式)
    SPOJ:Eagle and Dogs(求树上每个点最远可以走到哪里---树的直径||DP)
    【字符串】BZOJ上面几个AC自动机求最为字串出现次数的题目
    codeforces round #405 B. Bear and Friendship Condition
    codeforces round #419 C. Karen and Game
    codeforces round #419 B. Karen and Coffee
    codeforces round #419 A. Karen and Morning
    【ZOJ 3609】Modular Inverse 最小乘法逆元
  • 原文地址:https://www.cnblogs.com/sunny18/p/8251663.html
Copyright © 2020-2023  润新知