kubuntu 22.04 больше не запускает PHP cron-задания нормально (логи остаются пустыми, скрипт никогда не запускается)

Вопрос или проблема

У меня есть PHP-скрипт, который работал правильно до примерно 3 или 4 дней назад, также из crontab. Он загружает RSS-новости и помещает их в базу данных.

Проблема, с которой я сталкиваюсь в данный момент, заключается в том, что этот скрипт больше не запускается из crontab. Он по-прежнему работает, когда его запускают из окружения sudo в консоли.

root@parakeet:/var/www/nicer.app/NicerAppWebOS/apps/NicerAppWebOS/applications/2D/news# source "/var/www/nicer.app/NicerAppWebOS/scripts.install/install.cron.d/nicerapp__init_globals.sh" && php "/var/www/nicer.app/NicerAppWebOS/apps/NicerAppWebOS/applications/2D/news/crontabEntry_manageDatabase.php" >> "$NA_LOGS_PATH/$dateMinutesSeconds-news_crontabEntry_manageDatabase.txt" 2>&1

О, заданию cron необходимо указать, откуда запускать этот скрипт, потому что он зависит от переменных $_SERVER, которые должны быть “правильными”.

root@parakeet:#crontab -e

*/5 * * * * cd “/var/www/nicer.app/NicerAppWebOS/scripts.install” && source “/var/www/nicer.app/NicerAppWebOS/scripts.install/install.cron.d/nicerapp__init_globals.sh” && php “/var/www/nicer.app/NicerAppWebOS/apps/NicerAppWebOS/applications/2D/news/crontabEntry_manageDatabase.php” >> “$NA_LOGS_PATH/$dateMinutesSeconds-news_crontabEntry_manageDatabase.txt” 2>&1

Это работает, как задумано, для меня. URL = https://nicer.app/world-news

Ответ или решение

Проблема, с которой вы сталкиваетесь, связана с выполнением Cron-задач в вашей системе Kubuntu 22.04, где скрипт на PHP больше не запускается как положено. Давайте разберемся с возможными причинах и путями их устранения.

Причины, по которым Cron-задачи могут не срабатывать:

  1. Пути и переменные окружения:
    Cron выполняет задачи в ограниченном окружении, что означает, что некоторые переменные окружения, которые доступны в терминале, могут быть недоступны для задач Cron. Например, переменная NA_LOGS_PATH может не определяться, когда скрипт запускается из-за задачи Cron. Убедитесь, что все переменные правильно определены и доступны для использования в скрипте.

  2. Правильный контекст выполнения:
    Ваш скрипт требует наличия корректных переменных $_SERVER, которые могут быть недоступны, когда PHP запускается из Cron. Убедитесь, что вы правильно устанавливаете контекст, в котором должен выполняться ваш скрипт.

  3. Журналирование ошибок:
    Поскольку логи остаются пустыми, возможно, имеет смысл добавить дополнительное журналирование. Используйте конструкцию echo или error_log() в вашем PHP-скрипте, чтобы отлавливать ошибки. Это даст вам лучшее представление о том, что происходит во время выполнения скрипта.

  4. Права доступа:
    Иногда проблемы связаны с правами доступа. Убедитесь, что пользователь, от имени которого выполняется Cron-задача, имеет достаточные права для исполнения вашего скрипта и доступа к необходимым файлам и каталогам.

Предложения по решению проблемы:

  • Проверьте содержимое вашего скрипта и убедитесь, что все необходимые переменные определены в сценарии установки:

    source "/var/www/nicer.app/NicerAppWebOS/scripts.install/install.cron.d/nicerapp__init_globals.sh"
  • Модифицируйте ваш crontab, чтобы явно указать пути к переменным окружения. Например, вы можете хранить устанавливаемые переменные в самом crontab:

    */5 * * * * NA_LOGS_PATH="/path_to_logs" cd "/var/www/nicer.app/NicerAppWebOS/scripts.install" && source "/var/www/nicer.app/NicerAppWebOS/scripts.install/install.cron.d/nicerapp__init_globals.sh" && php "/var/www/nicer.app/NicerAppWebOS/apps/NicerAppWebOS/applications/2D/news/crontabEntry_manageDatabase.php" >> "$NA_LOGS_PATH/$dateMinutesSeconds-news_crontabEntry_manageDatabase.txt" 2>&1
  • Добавьте в скрипт обработку ошибок, чтобы логировать их:

    error_reporting(E_ALL);
    ini_set('display_errors', '1');
  • Попробуйте запускать Cron с более полными командами и учтите, что рекомендуется использовать полные пути до всех исполняемых файлов и ресурсов.

Заключение:

К сожалению, проблемы с выполнением Cron-задач могут быть результатом множества факторов. Если вышеупомянутые советы не решили проблему, вы можете дополнительно исследовать системные логи (/var/log/syslog), чтобы найти какие-либо подсказки о том, почему ваша задача не выполняется как ожидается. Убедитесь, что в системе не было недавних изменений, которые могут повлиять на выполнение Cron, таких как обновления или модификации конфигураций.

Если вам нужны дополнительные инструкции или помощь с отладкой, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...