Linux crontab调用问题

来源:互联网 发布:软件检测机构 编辑:程序博客网 时间:2024/06/05 10:34

背景: 前段时间由于有些人员离职,导致监控邮件发送报错,监控邮件一直没有发出来,过了好久才知道,于是做了一个队tomcat异常日志的监控,有错误就发邮件(用python写的)

            写好之后,于是用Linux自带的crontab定时器来做。

0  20 10 * * * python /home/pentaho/sendmail.py >/dev/null 2>&1

最开始时这样写的,但是发现怎样都没有调用成功,于是做了几个猜想:

1,crontab  调用python的方式错了

2,python 执行错了

3,crontab 配置错了

后面发现是 crontab的格式错了,应该是,只有五个位置,而六个位置是cron表达式

 20 10 * * * python /home/pentaho/sendmail.py >/dev/null 2>&1


于是在网上整理了关于crontab的资料


CRONTAB概念/介绍
    crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,
可以在无需人工干预的情况下运行作业。crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。
系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。


对于crontab来说,Linux系统中每个用户都有自己的crontab,如果你是新增crontab定时器,千万不要执行crontab -r,这个会删除掉原来的定时器

触发方式:

crontab由于是系统自带的,所以当增加或者修改后,不要重启服务,系统会每隔一分钟扫描这个文件。

系统的cron文件在  /etc/crontab

用户的cron文件在/var/spool/cron/crontab下

[root@Q302-OSSTJ11 ~]# cd /var/spool/cron[root@Q302-OSSTJ11 cron]# ll |grep crontab[root@Q302-OSSTJ11 cron]# ll总计 8-rw------- 1 pentaho root   1 12-08 14:43 pentaho-rw------- 1 root    root 350 12-09 10:51 root[root@Q302-OSSTJ11 cron]# cat root0 5 * * *  /home/crond/logwatch.pl >/dev/null 2>&10 5 * * * /home/crond/logrotate  >/dev/null 2>&10 5 * * * /home/crond/prelink  > /dev/null 2>&10 */1 * * * /home/crond/ntp.sh  >/dev/null 2>&10 5 * * * /home/crond/rpm  >/dev/null 2>&10 5 * * * /home/crond/tmpwatch  >/dev/null 2>&10 10 * * * python /home/pentaho/sendmail.py >/dev/null 2>&1[root@Q302-OSSTJ11 cron]# 


Crontab语法
usage:  crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)
        -s      (selinux context)


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 执行








0 0
原创粉丝点击