cron 命令不运行,获取输出 /bin/sh: 1: php: not find

问题描述 投票:0回答:2

我的里面有以下内容

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。
我尝试以不同的方式更改路径,但仍然给出相同的错误。
有很多类似的问题,但我没有找到答案......

php cron
2个回答
2
投票

当前目录不在

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

0
投票

感谢@Some程序员老兄。
我想补充一些细节,因为我原本无法理解他的意思。

基本上,当我调用

php
时,cron 会在
PATH
内的每个文件夹中查找文件,但不是当前目录(除非它位于
PATH
内)。

当然,简单地删除
cd
是一个可行的解决方案。
但为了更好地解释这个问题,另一个完美的解决方案是这个:

0,30 * * * * cd /usr/local/bin && ./php /var/www/artisan my_command

这里与我最初使用的命令的唯一区别是,我指定使用带有

./
的当前路径。

© www.soinside.com 2019 - 2024. All rights reserved.