Когда я выполняю скрипт из терминала, он печатает результат sftp.
Если скрипт php выполняется из cron, он ничего не печатает, $ result будет пустым.
Crontab:
23 12 * * * php script.php >> /tmp/logs.log
Сценарий:
<?php
$command = 'lftp -u user,Password sftp://domain.com -e "set ftp:passive-mode off; set ftp:auto-passive-mode on; put -O /path/tests toTransfer/file.zip; bye;"';
$result = shell_exec($command);
echo $result;
if ($result) echo "uploaded";
else echo "Not uploaded";
?>
Я предполагаю cron
выполняется под другой учетной записью, чем та, которую вы используете в оболочке.
Ваш сценарий, вероятно, зависит от среды вашей учетной записи (например, файл с известными ключами хоста). У учетной записи cron этого нет, поэтому lftp
выходит из строя.
Вполне вероятно, что lftp
выводит некоторую ошибку на вывод ошибки. Но вы собираете только стандартный вывод.
Попробуйте начать с простого сценария оболочки и перенаправить как stdout, так и stderr в файл журнала:
lftp -u user,Password sftp://domain.com 2>&1 > /tmp/log.log
Обратите внимание, что вы используете SFTP. Поэтому нет смысла устанавливать специфичные для FTP параметры lftp
, лайк ftp:passive-mode
(в SFTP нет пассивного режима).
Других решений пока нет …