我的里面有以下内容
crontab -e
0,30 * * * * cd /usr/local/bin && php /var/www/artisan my_command > /var/www/storage/logs/cron.log 2>&1
但是我在里面得到以下内容
/var/www/storage/logs/cron.log
。
/bin/sh: 1: php: not found
我尝试运行以下命令以供参考:
# which php
/usr/local/bin/php
# whoami
root
我正在 Laravel 项目中的 docker 映像(操作系统:Ubuntu)内运行 cron。
我尝试以不同的方式更改路径,但仍然给出相同的错误。
有很多类似的问题,但我没有找到答案......
当前目录不在
PATH
中(也不应该在)。
只需跳过无用的
cd
命令并运行 /usr/local/bin/php
即可:
0,30 * * * * /usr/local/bin/php /var/www/artisan my_command > /var/www/storage/logs/cron.log 2>&1
感谢@Some程序员老兄。
我想补充一些细节,因为我原本无法理解他的意思。
基本上,当我调用
php
时,cron 会在 PATH
内的每个文件夹中查找文件,但不是当前目录(除非它位于 PATH
内)。cd
是一个可行的解决方案。0,30 * * * * cd /usr/local/bin && ./php /var/www/artisan my_command
这里与我最初使用的命令的唯一区别是,我指定使用带有
./
的当前路径。