zoukankan      html  css  js  c++  java
  • crontab 各参数详解及如何查看日志记录

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt145

    crontab各参数说明:

    crontab [-u user] [file] 

    crontab [-u user] [-e|-l|-r] 

    crontab -l -u root 查看root用户的任务表

    注意crontab是分用户的,以谁登录就会编辑到谁的crontab

    -e : 执行文字编辑器来编辑crontab,内定的文字编辑器是VI
    -r : 删除目前的crontab
    -l : 列出目前的crontab(查看专用)
    -i : 会和-r 配合使用,在删除当前的crontab时询问,输入y 则删除

    /etc/init.d/crond restart(stop/start)重启或者停止后再启动

    备份命令:

    应用:对crontab进行备份crontab -l>/home/backup/crontab/crontab`date '+%Y%m%d'`.bak

    22 21 * * * /usr/bin/backup

    crontab 中文乱码

    crontab启动的任务没有获取系统的环境变量,导致中文乱码

    解决办法:

       在执行的脚步中添加编码方式或者添加对应的环境变量

    如:

    1、/usr/bin/java -Dfile.encoding=UTF-8 -jar ALDTool.jar

    2、在脚本开头增加:

    export LANG="en_US.UTF-8"


    crontab特殊的符号说明:
    "*"代表所有的取值范围内的数字。特别要注意哦!
    "/"代表每的意思,如"*/5"表示每5个单位
    "-"代表从某个数字到某个数字
    ","分散的数字
    crontab文件的使用示例:

    30 21 * * *    表示每晚的21:30 
    45 4 1,10,22 * * 表示每月1、10、22日的4 : 45
    10 1 * * 6,0 表示每周六、周日的1 : 10
    0,30 18-23 * * * 表示在每天18 : 00至23 : 00之间每隔30分钟
    0 23 * * 6 表示每星期六的11 : 00 pm
    * */1 * * * 每一小时
    * 23-7/1 * * * 晚上11点到早上7点之间,每隔一小时
    * 8,13 * * 1-5 从周一到周五的上午8点和下午1点
    0 11 4 * mon-wed 每月的4号与每周一到周三的11点
    0 4 1 jan * 一月一号的4点

    -------------------------------- 如何查看crontab的日志记录 --------------------------------------------------------

    昨天crontab中的同步任务没有执行,不知道是什么原因没有执行,貌似任务hang住了,想查询一下crontab到底问题出在哪里,或者hang在了什么地方。
    如:30 12 * * * /data/bk/bk.sh >/tmp/test.log 2>&1 &

    将crontab运行日志输出到/tmp/test.log中


    1.  linux
    看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察
     
    2.  unix
    在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。
     
    3. mail任务
    在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。

    =====================================================================================

    yum install crontabs

    rpm -q crontabs

    ll /var/spool/cron == crontab -l

    =====================================================================================

    2.2 Crontab 格式说明

    我们可以用crontab -e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。

    添加的命令必须以如下格式:

    * * * * * /command path

    前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。

    前5个字段分别表示:

    分钟:0-59

    小时:1-23

    日期:1-31

    月份:1-12

    星期:0-6(0表示周日)

    还可以用一些特殊符号:

    *: 表示任何时刻

    ,: 表示分割

    -:表示一个段,如第二端里: 1-5,就表示1到5点

    /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.

    一些示例:

    00 8,12,16 * * * /data/app/scripts/monitor/df.sh

    30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh

    10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh

    10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh

    10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh

    43 21 * * * 21:43 执行

    15 05 * * *    05:15 执行

    0 17 * * * 17:00 执行

    0 17 * * 1 每周一的 17:00 执行

    0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行

    0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行

    0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行

    42 4 1 * *     毎月1日的 4:42分 执行

    0 21 * * 1-6   周一到周六 21:00 执行

    0,10,20,30,40,50 * * * * 每隔10分 执行

    */10 * * * *        每隔10分 执行

    * 1 * * *         从1:0到1:59 每隔1分钟 执行

    0 1 * * *         1:00 执行

    0 */1 * * *        毎时0分 每隔1小时 执行

    0 * * * *         毎时0分 每隔1小时 执行

    2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行

    30 5 1,15 * *       1日 和 15日的 5:30 执行

    2.3 & 后台执行命令

    当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。

    如:

    30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &

    在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。

    不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:

    如:
    command >out.file 2>&1 &

    在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

    2.4 2>&1 含义

    先看一个例子:

    0 2 * * * /u01/test.sh >/dev/null 2>&1 &

    这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。

    在这里有有几个数字的意思:

    0表示键盘输入

    1表示标准输出

    2表示错误输出.

    我们也可以这样写:

    0 2 * * * /u01/test.sh >/u01/out.file & –这里没写,默认是1

    0 2 * * * /u01/test.sh 1>/u01/out.file &

    0 2 * * * /u01/test.sh 2>/u01/out.file &

    0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 &

    将tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。

    2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件out.file。

    &1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

    & :后台执行

    测试:

    ls 2>1 : 不会报没有2文件的错误,但会输出一个空的文件1;

    ls xxx 2>1: 没有xxx这个文件的错误输出到了1中;

    ls xxx 2>&1: 不会生成1这个文件了,不过错误跑到标准输出了;

    ls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1; 因为重定向符号>默认是1,这句就把错误输出和标准输出都传到out.txt 文件中。

    2.5 2>&1写在后面的原因

    格式:command > file 2>&1 == command 1> file 2>&1

    首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

    如果改成: command 2>&1 >file

    2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

  • 相关阅读:
    python中如何对数据进行各种排序?
    js原型链
    js局部变量,参数
    计算字符串中每个字符出现次数
    推荐几个web中常用js图表插件
    getElementsByTagName("div")和$("div")区别
    Hadoop集群(第6期)JDK和SSH无密码配置
    Hadoop集群(第5期)SecureCRT使用
    Hadoop集群(第4期)VSFTP安装配置
    /etc/vsftpd/vsftpd.conf
  • 原文地址:https://www.cnblogs.com/grefr/p/6095013.html
Copyright © 2011-2022 走看看