【问题标题】:How can I obtain result execution Sftp with php exec shell from crontab?如何使用 crontab 中的 php exec shell 获取结果执行 Sftp?
【发布时间】:2015-02-19 11:47:27
【问题描述】:

当我从终端执行脚本时,它会打印结果 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 守护程序的帐户 - 请参阅 man cron 了解详细信息。
  • 我想获取结果执行以知道文件是否上传成功。

标签: php shell crontab sftp shell-exec


【解决方案1】:

我假设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中没有被动模式)。

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2013-01-03
    • 2011-02-10
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多