来自php脚本的unix`at`,在shell中工作但不在web上工作

时间:2014-01-22 19:41:18

标签: php apache shell

我无法从php webscript执行unix at作业命令。 at作业的php看起来像这样:

$output=exec('echo "/usr/bin/perl /home/dir/test.pl" | /usr/bin/at now +1minute')

这可以在shell命令提示符下正常工作。我可以执行php脚本,运行atq以查看该作业已设置且作业属于root。然后等待并确认test.pl脚本已运行。 test.pl脚本对数据库执行简单更新,我可以检查以确认一切正常。

当我从网上执行php脚本时,请返回我的shell并再次运行atq。我可以看到这份工作已被放置,这次工作属于apache,所以一切似乎都很好。但是在等待预定的时间之后,test.pl脚本没有执行,我看到对db的更新没有起作用后我可以确认。

我相信这一定是权限问题,但我不确定。我尝试将/ home / dir和test.pl脚本所有权授予apache,但这仍然无效。我尝试在webroot文件夹中创建一个符号链接到/ home / dir,但这似乎也没有帮助。我不太了解apache权限,所以我可能会忽略一些东西。

这是目录和test.pl ls -l输出

/home/dir
drwxrwxr-x 2 apache apache

test.pl
-rwxr-xr-x 1 apache apache

感谢您对此提供任何帮助。

1 个答案:

答案 0 :(得分:0)

如果作业正在排队,那么我们可以忽略apache uid被拒绝访问'at'的可能性。

这意味着该作业可能无法执行(您怎么知道它无法运行?)

由于您具有root访问权限,因此下一步是查看apache uid的邮件文件 - 或者确定此uid的邮件发送到哪里并查看:man page

  

用户将通过命令邮寄标准错误和标准输出,   如果有的话。邮件将使用命令/ usr / sbin / sendmail

发送

(如果你在那里找不到任何东西,那么你可能想尝试像pwd | mail -s test apache这样的东西或者用-m运行来检查邮件是否得到应有的处理)

通常,守护程序所有者不会配置任何shell - 在调用之前是否设置了$ SHELL? (如果是这种情况并且邮件正在发送,则会有相应的错误等待阅读。)

您已经检查了test.pl文件的权限,但这似乎不是问题(假设未应用fACL或SELinux限制)。你检查过perl可执行文件的权限吗? test.pl是否可以尝试访问其可能具有权限的其他文件?