cron服务
cron是一个Linux下的定时执行工具.
1 | service crond start //启动服务 |
查看cron配置文件
/var/spool/cron/
这个目录存放的是每个用户包括root
的crontab任务,每个任务以创建者的名字命名.比如livfer创建的crontab定时任务,存放的是/var/spool/cron/livfer
,一般一个用户最多只有一个crontab文件
crontab 的限制
/etc/cron.allow
: 将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;
/etc/cron.deny
:将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab
以优先顺序来说, /etc/cron.allow
比 /etc/cron.deny
要优先, 而判断上面,这两个文件只选择一个来限制而已,因此,建议你只要保留一个即可, 免得影响自己在配置上面的判断!一般来说,系统默认是保留 /etc/cron.deny , 你可以将不想让他运行 crontab 的那个使用者写入 /etc/cron.deny 当中,一个帐号一行!
命令格式
1 | -u user 用来设定某个用户的crontab服务 |
crontab 文件格式
1 | .---------------- minute (0 - 59) |
- 第一列分钟 0-59
- 第二列小时 0-23
- 第三列日 1-31
- 第四列月 1-12
- 第五列星期 0-7
- 第六列要运行的命令
常用的方法
1 | 创建/编辑crontab |
实例
1 | 每一分钟执行一次 |
注意事项
注意环境变量
有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执行任务调度时就没有问题了.
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
脚本中设计的文件路径写全局路径
脚本执行要用到的环境变量时,通过
source
命令引入环境变量如1
2
3
4cat start_cbp.sh
!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf/usr/local/jboss-4.0.5/bin/run.sh -c mev &的那个手动执行脚本OK,但是crontab不执行时,很可能是环境变量的问题,可以尝试在crontab中直接引入环境变量如:
1
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
注意清理系统用户的邮件日志
每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。 例如,可以在crontab文件中设置如下形式,忽略日志输出:
1 | /dev/null 2>&1表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。 |
新创建的cron不会马上执行
新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行
当crontab失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron