Linux 定时任务 crontab 的坑
2020-12-27 更新
最容易出现定时任务不执行的原因还是路径错误。php /path/to/index.php controller action
里面首先就是要检查 path 路径是否正确,错一个字符都不行。
之前写过一篇关于Linux下定时任务的文章linux定时任务crontab。
在公司服务器及客户服务器上都有应用,照理说没什么问题。今天想在自己的服务器上创建一个ci执行脚本定时任务。但是怎么都不执行。
执行crontab -e
命令,添加相关的执行语句:
#每分钟执行脚本
*/1 * * * * php /path/to/index.php controller_name method_name
但是没有任何结果(我会把执行结果输出到当前项目根目录下的日志文件中)。
排查问题:
(一)开启crond服务service crond restart
(二)把语句放到shell中运行,没有任何问题,执行成功,在创建的日志文件中有相关的执行记录。
(三)因为是root用户,所以应该不存在文件没有操作权限的问题。
(四)找到了/var/spool/cron
目录,下面有一个root文件,没有问题。
(五)添加一个简单输出字符串到文件(脚本如下),也没有问题,执行成功,在创建的test.txt文件中有”Good morning.“内容。
#每分钟执行脚本
*/1 * * * * echo "Good morning." >> /root/test.txt
(六)看到有文章说,bash指令不能用相对路径,会找不到文件或相关指令,但PHP指令在$PATH变量中是有的,不管,找到php路径给它加上去试试,竟然ok了。完整有效的指令如下:
#每分钟执行脚本
*/1 * * * * /path/to/php /path/to/index.php controller_name method_name