如何从crontab获取带有php exec shell的结果执行Sftp?

时间:2015-02-19 11:47:28

标签: php shell crontab sftp shell-exec

当我从终端执行脚本时,它会打印结果sftp。
如果从cron执行php脚本,它不会打印任何内容,$ 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";
?>

1 个答案:

答案 0 :(得分:0)

我认为cron运行的帐户不同于您在shell中使用的帐户。

您的脚本可能依赖于您的帐户环境(例如具有已知主机密钥的文件)。 cron帐户没有,因此lftp失败。

lftp可能会在错误输出上打印一些错误。但是你只是在收集标准输出。

尝试从一个普通的shell脚本开始,并将stdout和stderr重定向到日志文件:

lftp -u user,Password sftp://domain.com 2>&1 > /tmp/log.log

请注意您使用的是SFTP。因此,设置lftp的特定于FTP的选项没有意义,例如ftp:passive-mode(在SFTP中没有被动模式)。