Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unix`at`来自php脚本,在shell中工作,但不来自web_Php_Apache_Shell - Fatal编程技术网

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

unix`at`来自php脚本,在shell中工作,但不来自web,php,apache,shell,Php,Apache,Shell,从php webscript执行unixatjob命令时遇到问题。 带有at作业的php如下所示: $output=exec('echo "/usr/bin/perl /home/dir/test.pl" | /usr/bin/at now +1minute') 这在shell命令提示符下可以正常工作。我可以执行php脚本,运行atq,查看作业是否已设置,作业是否属于root用户。然后等待并确认test.pl脚本已运行。pl脚本对数据库执行一个简单的更新,我可以检查该数据库以确认一切正常 当我

从php webscript执行unix
at
job命令时遇到问题。 带有
at
作业的php如下所示:

$output=exec('echo "/usr/bin/perl /home/dir/test.pl" | /usr/bin/at now +1minute')
这在shell命令提示符下可以正常工作。我可以执行php脚本,运行
atq
,查看作业是否已设置,作业是否属于root用户。然后等待并确认test.pl脚本已运行。pl脚本对数据库执行一个简单的更新,我可以检查该数据库以确认一切正常

当我从web执行php脚本时,返回shell并再次运行
atq
。我可以看到作业已被放置,这次作业属于apache,因此一切似乎都很好。但是在等待计划的时间之后,test.pl脚本没有执行,我可以在看到数据库的更新没有工作之后确认这一点

我相信这一定是权限问题,但我不确定。我尝试将/home/dir和test.pl脚本的所有权提供给apache,但仍然不起作用。我尝试在webroot文件夹中创建指向/home/dir的符号链接,但这似乎也没有帮助。我不知道apache的权限,所以我可能会忽略一些东西

这是目录和test.pl
ls-l
output

/home/dir
drwxrwxr-x 2 apache apache

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

感谢您在这方面的帮助。

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

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

由于您具有root访问权限,下一步将是查看apache uid的邮件文件,或者确定此uid的邮件发送到何处,然后查看:

用户将收到来自其命令的标准错误和标准输出, 如果有的话。邮件将使用/usr/sbin/sendmail命令发送

(如果您在那里找不到任何东西,那么您可能希望尝试类似于
pwd | mail-s test apache
或运行with-m来检查邮件是否得到了应有的处理)

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


您已经检查了test.pl文件的权限,这似乎不是问题所在(假设没有应用fACLs或SELinux限制)。您是否检查了perl可执行文件的权限?test.pl是否可以尝试访问它可能拥有权限的其他文件?

我可能误解了,但您可以尝试将
test.pl
的权限更改为
chmod 777
。此外,Apache通常没有所有权,管理员或用户没有。邮件似乎没有得到正确处理,至少当我尝试
pwd | mail-s test myusername时,我没有收到邮件。如果
at
使用$SHELL确定要使用哪个SHELL(当我以root用户或任何其他用户身份运行时,它是/bin/bash)当我从apache运行时,是否可能没有设置$SHELL?当排队的
at
作业运行时,是否可能没有可使用的SHELL?如果没有为user=see/etc/passwd配置的SHELL,则只需要设置$SHELL。注意:如果您的Apache没有shell,请在运行之前不要更改/etc/passwd-set$shell。并修复您的邮件。(请记住,您正在尝试为ApacheUID整理接收邮件)