Я сделал сценарий bash, который использует WP-CLI и был предназначен для запуска из cronjob. Он отлично работает по SSH, но не работает при запуске через cron. Во время отладки я обнаружил, что не работает часть WP-CLI. У него вообще нет выхода.
Я взял только часть сценария WP-CLI и протестировал ее. Я подтвердил, что проблема действительно в WP-CLI:
/home/username/script/test.sh
cd /var/www/domain.com/ && wp post create --post-title="test" post-content="testing" --post-status=future
Вот пример cronjob, который был добавлен через crontab -e
из учетной записи пользователя: (настроен на запуск каждую минуту в целях тестирования)
*/1 * * * * sh /home/username/script/test.sh
Сценарий отлично работает, если запускается из SSH, но при запуске из cron он не имеет вывода. Я пробовал добавить | mail -s example@foo.bar
к записи cronjob. Он отправляет вывод на мою электронную почту, но для команды wp-cli нет вывода. Я также попытался добавить свое имя пользователя в запись cronjob между данными времени и командой, чтобы убедиться, что он запускается от имени моего пользователя. Кроме того, я попытался отредактировать сценарий bash и изменить его на mail -s "cool story bro" example@foo.bar
и это сработало, он просто полностью игнорирует WP-CLI.
Я искал ответ около 12 часов. Недавно я нашел этот ответ на чей-то вопрос, который, я думаю, может помочь, но я не знаю, как его реализовать. https://serverfault.com/a/95736
Я только что нашел этот ответ на чей-то вопрос, и кажется, что это способ реализовать ответ другого человека, но это не сработало. https://serverfault.com/a/473961 Я использовал именно то, что он опубликовал.
Кстати, он запускается на обновленном сервере Ubuntu.
Объясните, пожалуйста, в чем проблема и как ее исправить. Или, если вы что-нибудь знаете об этом, прокомментируете или что-то в этом роде, я сейчас в отчаянии.
Поскольку ответ на мой вопрос был опубликован как комментарий, а не как ответ, я собираюсь ответить на него сам, чтобы помочь другим людям найти ответ на вопрос проще.
По рекомендации Сайруса я изменил указанное выше 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 от имени того же пользователя.
Я получил путь от which wp
и обновлен в cron, который, похоже, устранил проблемы. но может ли кто-нибудь сообщить мне, где мы можем настроить WP, чтобы он запускал его самостоятельно под cron, не определяя путь?
cd /home/master/applications/domain.com/public_html && /usr/local/bin/wp cron event run --due-now