2010-05-01 68 views
0

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

$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 
+0

您是否试图添加完整路径? – Cesar 2010-05-01 01:48:49

+0

您的意思是notify-send和firefox的完整路径? – basicxman 2010-05-01 01:51:02

回答

2

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

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

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

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

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

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

+0

是的,我需要将它设置为在X中运行。谢谢! – basicxman 2010-05-01 01:55:45

0

对以上关于cron的回答的评论:cron将以其用户的crontab身份运行命令。所以,如果你设置了crontab,它将像你一样运行命令。它会为你在登录时获得的启动脚本运行一些稍微不同的shell启动脚本 - 它知道它没有tty,所以它只执行〜/ .bashrc文件而不是配置文件集。检查手册页的cron和bash的详细信息