PHP скрипт умирает при запуске через задание CRON - PullRequest
0 голосов
/ 07 апреля 2020

Позвольте мне начать с того, что я совершенно не программист PHP - мне пришлось это исправить.

У меня есть функция, которая находится в файле сама по себе, которая в основном выглядит следующим образом:

<?php
function UploadFile($source, $destination){
   $debugLogPath = '/biglongpath/debug.log';
   file_put_contents($debugLogPath,PHP_EOL . "Beginning UploadFile function", FILE_APPEND);

    set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    require_once('Net/SFTP.php');

    ...Rest of the ftp code here...
}

?>

Использует phpseclib. Если я запускаю основной скрипт PHP (который вызывает эту функцию ...) через веб-браузер, все работает отлично. Когда я запускаю тот же скрипт через задание CRON, он умирает, как только вызывается эта функция. Я подтвердил это, выписав журнал отладки непосредственно перед вызовом функции - первый оператор перед записью функции в журнал, но «Начало функции UploadFile» никогда не пишется.

Я предполагаю что, может быть, это как-то связано с оператором require_once - может быть, это проблема пути или проблема с разрешениями, когда он выполняется через CRON?

Я попытался обернуть все содержимое функции в try / catch и выписать Исключение, но оно все равно просто умирает.

1 Ответ

0 голосов
/ 07 апреля 2020

Интересно, почему есть 3 полезных флага, когда в вопросе говорится, что файл записывается? Однако это не журнал ошибок CLI, и поэтому он не будет автоматически регистрировать там какие-либо ошибки. Второе сделанное предложение представляется более вероятным, хотя возможностей еще больше:

Убедитесь, что эти модули загружаются для PHP -CLI:

libsodium, openssl, mcrypt, gmp (как подсказки composer.json).

Запуск php --ini должен показать, какие INI-файлы были загружены. Даже если есть соответствующие INI-файлы, убедитесь, что инструкции внутри них не закомментированы с помощью ;.

Запуск сценария вручную из CLI, как пользователь, который запускает предложенный cronjob, с отчетом об ошибках включен. Если это не поможет, сделайте один шаг с помощью xdebug, чтобы увидеть, где именно он работает с ошибками (NetBeans, Eclipse, VS Code и некоторые другие IDE поддерживают отладку PHP). Это требует определенных усилий для его настройки, но затем предоставляет гораздо лучшую методологию отладки.

...