Вопрос или проблема
У меня есть 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-задачи могут не срабатывать:
-
Пути и переменные окружения:
Cron выполняет задачи в ограниченном окружении, что означает, что некоторые переменные окружения, которые доступны в терминале, могут быть недоступны для задач Cron. Например, переменнаяNA_LOGS_PATH
может не определяться, когда скрипт запускается из-за задачи Cron. Убедитесь, что все переменные правильно определены и доступны для использования в скрипте. -
Правильный контекст выполнения:
Ваш скрипт требует наличия корректных переменных$_SERVER
, которые могут быть недоступны, когда PHP запускается из Cron. Убедитесь, что вы правильно устанавливаете контекст, в котором должен выполняться ваш скрипт. -
Журналирование ошибок:
Поскольку логи остаются пустыми, возможно, имеет смысл добавить дополнительное журналирование. Используйте конструкциюecho
илиerror_log()
в вашем PHP-скрипте, чтобы отлавливать ошибки. Это даст вам лучшее представление о том, что происходит во время выполнения скрипта. -
Права доступа:
Иногда проблемы связаны с правами доступа. Убедитесь, что пользователь, от имени которого выполняется 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, таких как обновления или модификации конфигураций.
Если вам нужны дополнительные инструкции или помощь с отладкой, не стесняйтесь обращаться!