通过cron作业时不执行Bash命令 - PHP

时间:2010-05-01 01:43:42

标签: php bash ubuntu cron libnotify

我有一个每五分钟运行一次PHP脚本的cron作业; PHP脚本在脚本末尾执行两个bash命令。我知道脚本正在运行,因为它附加了一个日志文件。当我通过Ubuntu Gnome终端手动运行PHP脚本时,两个bash命令执行完美;但是当通过cron触发PHP脚本时,不会运行两个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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

关于cron的答案的评论:cron将以crontab的用户身份运行命令。因此,如果您设置了crontab,它将像您一样运行命令。它确实运行一组稍微不同的shell启动脚本到你登录时获得的 - 它知道它没有tty,所以它只执行〜/ .bashrc文件而不是配置文件集。有关详细信息,请查看cron和bash的手册页