【问题标题】:Bash commands not executed when through cron job - PHP通过 cron 作业时未执行 Bash 命令 - PHP
【发布时间】:2011-02-14 11:14:09
【问题描述】:

我有一个 cron 作业,每五分钟运行一次 PHP 脚本; PHP 脚本在脚本末尾执行两个 bash 命令。我知道脚本正在运行,因为它附加了一个日志文件。当我通过 Ubuntu Gnome 终端手动运行 PHP 脚本时,两个 bash 命令都能完美执行;但是,当 PHP 脚本通过 cron 触发时,两个 bash 命令不会运行。有什么想法吗?

$command = 'notify-send "' . count($infoleakPosts) . '  New Posts."';
`$command`;

$command = 'firefox http://example.com';
`$command`;

*/1 * * * * php /home/andrew/grab.php USERNAME PASSWORD # JOB_ID_1

【问题讨论】:

  • 您是否尝试添加完整路径?
  • 你是指notify-send和firefox的完整路径?

标签: php bash ubuntu cron libnotify


【解决方案1】:

通常,您的 cron 脚本将在不同的用户帐户下运行,并且可能设置了不同的环境路径。

尝试将命令行设置为使用命令的完整路径,即。 /path/to/notify-send "x New Posts".

您可以在常规终端中使用which notify-send 来获取要放入脚本的路径。

您还可以获取命令的输出来帮助调试。使用反引号运算符将返回输出,因此您可以将其分配给变量和/或转储它。

$output = `$command`;
error_log($output);

【讨论】:

    【解决方案2】:

    当您在 cron 下运行脚本时,您没有输出 tty 或 X-windows DISPLAY env-var。我怀疑这些命令正在运行但失败了。

    【讨论】:

    • 是的,我需要将它设置为在 X 中运行。谢谢!
    【解决方案3】:

    对上面关于 cron 的答案的评论:cron 将以 crontab 所在用户的身份运行命令。因此,如果您设置 crontab,它将像您一样运行命令。它运行的 shell 启动脚本集与您登录时获得的脚本略有不同——它知道它没有 tty,因此它只执行 ~/.bashrc 文件而不是配置文件集。查看 cron 和 bash 的手册页了解详细信息

    【讨论】:

      最近更新 更多