我做了一个使用WP-CLI的bash脚本,并打算从cronjob运行。 它从SSH运行良好,但通过cron运行时失败。 在debugging过程中,我发现这是WP-CLI部分没有运行。 它根本没有输出。
我只用脚本的WP-CLI部分进行了testing。 我已经确认WP-CLI确实是这个问题:
/home/username/script/test.sh
cd /var/www/domain.com/ && wp post create --post-title="test" post-content="testing" --post-status=future
以下是通过crontab -e从用户帐户中添加的cronjob示例:(设置为每分钟运行以进行testing)
*/1 * * * * sh /home/username/script/test.sh
如果从SSH运行,脚本运行完美,但是从cron运行时脚本没有输出。 我试过添加| mail -s [email protected] | mail -s [email protected]到cronjob条目。 它将输出发送到我的电子邮件,但wp-cli命令没有输出。 我也尝试添加我的用户名到时间数据和命令之间的cronjob条目,以确保它是作为我的用户运行。 此外,我试图编辑bash脚本,并将其更改为mail -s "cool story bro" [email protected] ,并且工作正常,它完全忽略了WP-CLI。
我一直在寻找大约12个小时的答案。 我最近发现这个答案给别人的问题,我想这可能会有所帮助,但我不知道如何实现它。 https://serverfault.com/a/95736
我刚刚find了这个答案给别人的问题,似乎是实现他人的答案的方式,但它没有奏效。 https://serverfault.com/a/473961我正是用他发布的。
顺便说一下,这是在最新的Ubuntu服务器上运行。
请说明问题所在,以及如何解决。 或者只是如果你对此有所了解,评论什么的,我现在很绝望。
由于我的问题的答案是作为评论发布而不是答案,我将自己回答,以帮助其他人更容易地find问题的答案。
根据赛勒斯的build议,我将上面的test.sh改为:
cd /var/www/domain.com/ && /usr/local/bin/wp post create --post-title="test" post-content="testing" --post-status=future
包括完整path修复了这个问题。 但是,我不明白为什么从一个username的cronjob运行的脚本将被执行不同,如果从同一个用户从SSH运行。