海滨擎蟹

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

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »