Skip to content

cron #8

@tzcteddy

Description

@tzcteddy

划重点
crontab是一个守护进程,服务叫做crond
时间表达式要熟悉
环境变量设置
输出重定向
好的方式是编辑 /etc/cron.d, 而不是crontab -e 没有sudo权限就还是用 crontab -e 吧
centos7 crontab日志文件为 tail /var/log/cron

使用
时间模板
5个参数分别为 分、时、日、月、周

* * * * *    每分钟执行
5 * * * *  每个小时的第五分钟执行
0 */2 * * *  每隔2个小时执行一次
* 12 * *   Mon  周一12时每分钟执行一次
59 23 1 5 *     每年的5 月 1 日的 23:59
*/5 * * * *   每5分钟执行一次
30 16 * * 5   每个星期5下午4点办
30 21 * * *  每天晚上9点半执行
45 4 1,10,22 * *  每个月的1,10,22号的4点45执行
10 1 * * 6,0  每周六日的1点10分执行
0,30 18-23 * * *  每天的18到23点,每个小时的0分,30分执行一次
0 7 * * *  每天早上7点执行一次
0 6-12/3 * 12 * 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次

0,5,10,15,20,25,30,35,40,45,50,55  * * * * /var/www/devdaily.com/bin/do-update.sh

环境变量
source /etc/profile 通过souce来脚本中引入变量
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf 特定的变量用export来指定

还是不行的话可以直接在crontab中增加环境变量的导入
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

注意事项
1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’`。

crontab 如果把一个python 文件的print 重定向到文件中,不能单纯的 >a.txt
而是 python xx.py > a.txt 2>&1 才行

cron 也可把文件放 /etc/cron.d 文件夹下,但是写法上要注意

参考:http://www.server-memo.net/tips/etc-crontab.html

大概的格式如下,不同的就是这里不是最前面不仅有5个参数来表示时间,还有一个参数来表示用户,执行命令如果不是path中,使用绝对路径

[root@erya cron.d]# cat cacti
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

*/5 * * * * root /usr/bin/php /home/www/cacti/poller.php > /dev/null 2>&1

[root@localhost apmonitor]# cd -
/etc/cron.d

[root@localhost cron.d]# cat apmonitor
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
MONITORHOME=/home/project/apmonitor

最好采用这种方式,不会对其他的cron产生影响
可以自定义变量

0,5,10,15,20,25,30,35,40,45,50,55 * * * * root cd $MONITORHOME && /usr/bin/python manage.py snmptasks livescan
0 3 * * * root cd $MONITORHOME && /usr/bin/python manage.py snmptasks macscan
20 3 * * * root cd $MONITORHOME && /usr/bin/python manage.py snmptasks dailysts
30 4 * * * root cd $MONITORHOME && /usr/bin/python manage.py snmptasks dailycleardb

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions