crontab 定时任务未按照预期执行
crontab -e
添加测试脚本后,检查日志文件,未按照预期执行
# 测试任务
* * * * * /usr/bin/php /www/server/script/test.php
/www/server/script/test.php
$file_name = 'logs/' . date('Y-m-d') . '.log';
$data = date('Y-m-d H:i:s') . ": write log!\n";
file_put_contents($file_name, $data, FILE_APPEND);
查看定时任务执行日志,/var/log/cron
...
Aug 12 11:47:01 JT-T-KEYAN-001 CROND[8920]: (root) CMD (/usr/bin/php/www/server/script/test.php)
Aug 12 11:47:01 JT-T-KEYAN-001 CROND[8919]: (root) MAIL (mailed 491 bytes of output but got status 0x007f#012)
日志中出现 (root) MAIL (mailed 491 bytes of output but got status 0x007f#012)
,说明测试脚本执行时有遇到错误,通过邮件服务发送错误信息,在发送邮件时出现错误,检查邮件服务状态:
[root@JT-T-KEYAN-001 script]# service postfix status
master 已死,但 pid 文件仍存
[root@JT-T-KEYAN-001 script]#
[root@JT-T-KEYAN-001 script]# postfix check
postfix: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
[root@JT-T-KEYAN-001 script]#
邮件服务是未正常运行的,先将执行脚本的错误信息进行输出重定向,修改定时任务 crontab -e
:
# 测试任务
* * * * * /usr/bin/php /www/server/script/test.php >> /www/server/script/logs/error.log 2>&1
观察错误日志文件中的输出信息:
[root@JT-T-KEYAN-001 script]# tail -f /www/server/script/logs/error.log
Warning: file_put_contents(./logs/2020-08-12.log): failed to open stream: No such file or directory in /www/server/script/test.php on line 3
日志文件不存在,查看日志目录下的文件:
[root@JT-T-KEYAN-001 script]# ll logs/
总用量 8
-rw-r--r-- 1 root root 144 8月 12 11:36 2020-08-12.log
-rwxrwxrwx 1 root root 632 8月 12 11:49 error.log
[root@JT-T-KEYAN-001 script]#
将测试脚本中的日志文件路径,修改为全路径:
/www/server/script/test.php
$file_name = '/www/server/script/logs/' . date('Y-m-d') . '.log';
$data = date('Y-m-d H:i:s') . ": write log!\n";
file_put_contents($file_name, $data, FILE_APPEND);
[root@JT-T-KEYAN-001 script]# tail -f logs/2020-08-12.log
2020-08-12 11:53:01: write log!
2020-08-12 11:53:01: write log!
2020-08-12 11:54:01: write log!
2020-08-12 11:54:01: write log!
测试脚本在每分钟的 01
秒时,被执行两次,检查 crond
服务的进程数量:
[root@JT-T-KEYAN-001 script]# ps -ef|grep crond|grep -v grep
root 2360 1 0 Aug03 ? 00:00:06 crond
root 9728 1 0 11:37 ? 00:00:00 crond
[root@JT-T-KEYAN-001 script]#
尝试重启 crond
服务:
[root@JT-T-KEYAN-001 script]# service crond restart
停止 crond: [确定]
正在启动 crond: [确定]
[root@JT-T-KEYAN-001 script]#
[root@JT-T-KEYAN-001 script]# ps -ef|grep crond|grep -v grep
root 2360 1 0 Aug03 ? 00:00:06 crond
root 9781 1 0 11:56 ? 00:00:00 crond
[root@JT-T-KEYAN-001 crontab]#
重启后还是有两个 crond
进程,使用 kill -9 PID
杀掉一个:
[root@JT-T-KEYAN-001 script]# kill -9 9781
[root@JT-T-KEYAN-001 script]# ps -ef|grep crond|grep -v grep
root 2360 1 0 Aug03 ? 00:00:06 crond
[root@JT-T-KEYAN-001 script]#
再观察日志状态:
[root@JT-T-KEYAN-001 script]# tail -f logs/2020-08-12.log
2020-08-12 11:57:01: write log!
2020-08-12 11:58:01: write log!