zoukankan      html  css  js  c++  java
  • linux的crontab定时任务使用(一)

    crontab命令说明如下:
    crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

    # -e:编辑该用户的计时器设置;
    crontab -e #进入本用户的编辑
    # -l:列出该用户的计时器设置;
    crontab -l 
    # -r:删除该用户的计时器设置;
    crontab -r 
    # -u<用户名称>:指定要设定计时器的用户名称。
    crontab -ulzq -l  #需要有可以使用-u权限的用户执行,比如root,来操作其它用户的crontab任务

    知识扩展
    Linux下的任务调度分为两类:系统任务调度和用户任务调度
    系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
    /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变量指定了在执行命令或者脚本时使用的主目录。
    用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件(定时命令的文件)都被保存在/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:


    /etc/cron.deny 该文件中所列用户不允许使用crontab命令
    /etc/cron.allow 该文件中所列用户允许使用crontab命令
    /var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
    crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置。

    Linux中,周期执行的任务一般由crond这个守护进程来处理  ps -ef | grep crond

    crond读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。

    crond的配置文件称为“crontab”,是“cron table”的简写。

    一、 cron在3个地方查找配置文件(设置shell脚本):

    1、/var/spool/cron/ 这个目录下存放的是每个用户(包括root)的crontab任务,每个任务以创建者的名字命名,比如用户tom建的crontab任务对应的文件就是/var/spool/cron/tom

    一般一个用户最多只有一个crontab文件(如:root, tom等),其对应日志在/var/spool/mail/root(或/var/spool/mail/tom)文件里

     2、/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的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

    例如:

    */5 * * * * root /usr/libexec/atrun
    
    minute:代表一小时内的第几分,范围 0-59。 
    hour:代表一天中的第几小时,范围 0-23。 
    mday:代表一个月中的第几天,范围 1-31。 
    month:代表一年中第几个月,范围 1-12。 
    wday:代表星期几,范围 0-7 (0及7都是星期天)。 
    who:要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。 
    command:所要执行的指令

    3、/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

    二、 权限

    crontab权限问题到 /etc/ 或者/var/adm/cron/下看一看,文件cron.allow和cron.deny是否存在 用法如下:  1、如果两个文件都不存在,则只有root用户才能使用crontab命令。  2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。  3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。  4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户, 以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。  AIX 中 普通用户默认都有 crontab 权限,如果要限制用户使用 crontab ,就需要编辑/var/adm/cron/cron.deny  HP-UNIX 中默认普通用户没得crontab 权限 ,要想放开普通用户的crontab 权限可以编。

    三、crond服务
    /sbin/service crond start //启动服务
    /sbin/service crond stop //关闭服务
    /sbin/service crond restart //重启服务
    /sbin/service crond reload //重新载入配置
    查看crontab服务状态:
    service crond status
    手动启动crontab服务:
    service crond start
    查看crontab服务是否已设置为开机启动,执行命令:
    ntsysv
    加入开机自动启动:
    chkconfig –level 35 crond on

    四、 crontab用法 

    crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格,用户把需要执行的命令序列放到crontab文件中以获得执行。 每个用户都可以有自己的crontab文件,/var/spool/cron下的crontab文件不可以直接创建或者直接修改,该crontab文件是通过crontab -e命令创建的。

    在crontab文件中如何输入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。     每个域之间使用空格或者制表符分隔。格式如下:   minute hour day-of-month month-of-year day-of-week commands 合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)

    除了数字还有几个个特殊的符号就是 "*"、"/" 和  "-"   ","   ,* 代表所有的取值范围内的数字。"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

    一些例子:

     1 #每天早上6点 
     2 0 6 * * * echo "Good morning." >> /tmp/test.txt    #注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
     3 
     4 #每两个小时 
     5 0 */2 * * * echo "Have a break now." >> /tmp/test.txt  
     6 
     7 #晚上11点到早上8点之间每两个小时和早上八点 
     8 0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
     9 
    10 #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
    11 0 11 4 * 1-3 command line
    12 
    13 #1月1日早上4点 
    14 0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root  #如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/ 
    15 
    16 #每小时(第一分钟)执行/etc/cron.hourly内的脚本
    17 01 * * * * root run-parts /etc/cron.hourly
    18 
    19 #每天(凌晨4:02)执行/etc/cron.daily内的脚本
    20 02 4 * * * root run-parts /etc/cron.daily 
    21 
    22 #每星期(周日凌晨4:22)执行/etc/cron.weekly内的脚本
    23 22 4 * * 0 root run-parts /etc/cron.weekly 
    24 
    25 #每月(1号凌晨4:42)去执行/etc/cron.monthly内的脚本 
    26 42 4 1 * * root run-parts /etc/cron.monthly 
    27 
    28 #注意:  "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。   
    29 
    30 #每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。 
    31 5,15,25,35,45,55 16,17,18 * * * command
    32 
    33 #每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
    34 00 15 * *1,3,5 shutdown -r +5
    35 
    36 #每小时的10分,40分执行用户目录下的innd/bbslin这个指令: 
    37 10,40 * * * * innd/bbslink 
    38 
    39 #每小时的1分执行用户目录下的bin/account这个指令: 
    40 1 * * * * bin/account
    41 
    42 #每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔): 
    43 203 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)  
    44 
    45 #每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。 
    46 
    47 12,553 4-91,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt 

    遇到的错误:在设定每天运行任务的时候,前面的分、小时都用了 * ,这样就是每分钟都运行了,与设想的任务安排不符。必须把分、时都设定为 0 。

    参考:https://cloud.tencent.com/developer/article/1392794

    如何查看crontab定时任务是否执行

    crontab命令的功能是在一定的时间间隔调度一些命令的执行。查看其执行情况,可以使用查看其执行日志的方式。

    方法/步骤:

    1、针对Linux系统的查询方法(含Redhat、SUSE)

    看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察。可以使用普通用户查看所有用户的定时任务执行情况:

    [apps@localhost log]$ cat  /var/log/cron | grep apps
    Dec 30 15:43:01 localhost CROND[3228]: (apps) CMD (echo 'heloo' >> /apps/jr_python/shell/ff)
    Dec 30 15:44:01 localhost CROND[3231]: (apps) CMD (echo 'heloo' >> /apps/jr_python/shell/ff)
    Dec 30 15:45:01 localhost CROND[3234]: (apps) CMD (echo 'heloo' >> /apps/jr_python/shell/ff)
    Dec 30 15:46:01 localhost CROND[3237]: (apps) CMD (echo 'heloo' >> /apps/jr_python/shell/ff)
    Dec 30 15:47:01 localhost CROND[3241]: (apps) CMD (echo 'heloo' >> /apps/jr_python/shell/ff)
    Dec 30 15:48:01 localhost CROND[3244]: (apps) CMD (echo 'heloo' >> /apps/jr_python/shell/ff)

    2、针对UINX系统查询方法(AIX、HP-UX)

    在 /var/spool/cron/tmp文件中,有croutXXX00999的tmp文件,tail 这些文件就可以看到正在执行的任务了

    3. mail任务(Linux UNIX)在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况
    tail -50 /var/spool/mail/apps
  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/yoyowin/p/12034151.html
Copyright © 2011-2022 走看看