Когда я выполняю сценарий с терминала, он выводит результат 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).