我编写了一个 bash 脚本WP-CLI并打算通过 cronjob 运行。它通过 SSH 运行良好,但通过 cron 运行时失败。在调试过程中,我发现是 WP-CLI 部分没有运行。它根本没有输出。
我只取了脚本的 WP-CLI 部分并进行了测试。我确认 WP-CLI 确实是问题所在:
/home/用户名/script/test.sh
cd /var/www/domain.com/ && wp post create --post-title="test" post-content="testing" --post-status=future
crontab -e
以下是通过用户帐户添加的 cronjob 的示例:(出于测试目的,设置为每分钟运行一次)
*/1 * * * * sh /home/username/script/test.sh
如果从 SSH 运行,该脚本可以完美运行,但从 cron 运行时则没有输出。我尝试添加到 cronjob 条目中。它将输出发送到我的电子邮件,但没有 wp-cli 命令的输出。我还尝试将我的用户名添加到时间数据和命令之间的 cronjob 条目中,以尝试确保它以我的用户身份运行。此外,我尝试编辑 bash 脚本并将其更改为,并且运行良好,它完全忽略了 WP-CLI。| mail -s [email protected]
mail -s "cool story bro" [email protected]
我已经搜索答案大约 12 个小时了。我最近找到了这个对别人问题的答案,我认为它可能有帮助,但我不知道如何实现它。https://serverfault.com/a/95736
我刚刚找到了这个对别人问题的回答,它看起来像是实现其他人答案的方法,但是没有用。https://serverfault.com/a/473961我使用的正是他发布的内容。
顺便说一下,这是在最新的 Ubuntu 服务器上运行的。
请解释一下问题是什么以及如何解决。或者,如果您对此有任何了解,请发表评论或做其他事情,我现在非常绝望。
答案1
由于我的问题的答案是作为评论而不是答案发布的,因此我将自己回答,以帮助其他人更轻松地找到问题的答案。
根据 Cyrus 的建议,我将以上内容更改test.sh
为:
cd /var/www/domain.com/ && /usr/local/bin/wp post create --post-title="test" post-content="testing" --post-status=future
包括完整路径可以解决问题。但是,我不明白为什么从 cronjob 运行的脚本username
与以同一用户身份从 SSH 运行的脚本的执行方式不同。
答案2
我从 cron 中获取了路径which wp
并在其中进行了更新,这似乎已经解决了问题。但是有人可以告诉我在哪里可以设置 wp 使其在 cron 下自行运行而无需定义路径吗?
cd /home/master/applications/domain.com/public_html && /usr/local/bin/wp cron event run --due-now
答案3
我遇到了同样的问题。对我来说,这是 cPanel 的 Jailed Shell 选项在运行 cron 时阻止对、、等的访问wp
。wget
您curl
可以通过登录 WHM (:2087) 并转到“帐户功能”>“管理 Shell 访问”来修复此问题。确保帐户设置为“普通 Shell”。