Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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
在后台Linux服务器w/PHP exec()中运行脚本_Php_Apache - Fatal编程技术网

在后台Linux服务器w/PHP exec()中运行脚本

在后台Linux服务器w/PHP exec()中运行脚本,php,apache,Php,Apache,我试图使用exec()函数触发一个PHP脚本在后台运行,但无法使其正常工作。我在stack overflow和其他论坛上读过无数的帖子,尝试了很多变体,但都没有用 服务器信息: Operating System: Linux PHP: 5.2.17 Apache Version: 2.2.23 Home Directory: /home1/username 我目前正在使用以下代码: exec("/home1/username/php /home1/username/public_html/m

我试图使用exec()函数触发一个PHP脚本在后台运行,但无法使其正常工作。我在stack overflow和其他论坛上读过无数的帖子,尝试了很多变体,但都没有用

服务器信息:

Operating System: Linux
PHP: 5.2.17 
Apache Version: 2.2.23
Home Directory: /home1/username
我目前正在使用以下代码:

exec("/home1/username/php /home1/username/public_html/myscript.php > /dev/null &");
当我运行上面的脚本时,我没有得到错误日志,cPanel错误日志中也没有错误,但是脚本肯定不会执行。当我浏览到它时,它会运行并立即给我发电子邮件。你知道为什么这不起作用/我如何找出产生了什么错误吗

更新cPanel Process Manager输出

exec("php /home1/username/php /home1/username/public_html/myscript.php > /dev/null &");
产生:

27183   php /home1/username/php /home1/username/public_html/myscript.php
27221   [sh]
27207   php /home1/username/php /home1/username/public_html/myscript.php
27219   php /home1/username/php /home1/username/public_html/myscript.php
27222   php /home1/username/php /home1/username/public_html/myscript.php
27224   php /home1/username/php /home1/username/public_html/myscript.php
27249   sh -c php /home1/username/php /home1/username/public_html/myscript.php > /dev/null &

这正常吗?脚本似乎挂起很长时间,即使它应该执行得很快。

因为您想从命令行运行
myscript
,所以我们不这样做:

exec('(/home1/username/public_html/myscript.php) > /dev/null &',$r,$s);
并将其作为myscript.php中的第一行:

#!/home1/username/php -n
<?php
    //script goes here
?>
#/home1/username/php-n

这应该行得通。hashbang告诉系统使用什么程序来运行下面的脚本,因此您不需要将它添加到
exec
调用中。另外,在完整的脚本调用周围放上括号更安全(因此更好),这样PHP就知道哪些输出必须重定向到哪个流,以避免可能发生的任何问题。特别是当服务器上安装了libs或PHP-GTK之类的包时(因此有了
-n
选项)。

您是否尝试过直接调用PHP CLI

exec("php /home1/username/php /home1/username/public_html/myscript.php > /dev/null &");
您将不需要#!,如果通过Apache调用,将输出到浏览器

编辑。 看起来您的脚本正在工作,但在后台执行的PHP脚本正在挂起(而不是退出)。尝试以下变体:

exec("php /home1/username/php /home1/username/public_html/myscript.php > /dev/null 2>&1 &");

无法让exec使用php。即使当我获得服务器的shell访问权限时,命令仍然挂起。我决定改用wget来完成同样的事情。作品很棒:)


如何运行exec()?从一个shell脚本,另一个PHP文件?您的PHP真的安装在/home/username/PHP吗?我正在从另一个PHP脚本运行它。是的,在我的FTP中显示为/php,我的主目录为/home1/username。有没有办法验证这个?我猜你是在Apache下运行的?Apache是否对脚本及其所有目录都有读+执行写操作?是的,它确实有这样做的权限。Apache版本:2.2.23我试过了,但问题是一样的。不运行我的脚本,也不输出任何错误。只有一张空白的白页,没有错误记录file@user1647347:添加
var\u dump($r)时,您看到了什么
echo$s就在
exec
语句之后?如果
$s!==0,正在调用的脚本有问题。。。在不将输出重定向到
/dev/null
的情况下尝试此操作。首先,您正在使用代码有效地隐藏输出。没有
/dev/null
-位?您确定php.ini配置正确,因此
mail
可以正常工作吗?通过显示输出,我的意思是:执行常规的
exec
调用:(
exec('/path/to/script.php',$r,$s)
,然后回显
$r
$s VAL
是-当我直接运行脚本时,它会立即给我发电子邮件。当您从exec调用运行脚本时?在这种情况下,没有问题,是吗?当我运行时,我刚刚得到一个白色页面,没有错误没有脚本运行。有什么方法可以检查错误吗?没有生成错误日志dmaybe而不是/dev/null我可以通过某种方式更改它以查看输出?您可以直接在命令行上运行该命令吗?听起来您好像有崩溃(空白页),并且您的错误日志记录必须设置得太低。Is exec()你的主机允许吗?当然可以,试着将输出发送到一个你可以跟踪的文件。谢谢,试过了,但没有运气:/我对这个感到困惑。我会试着问BlueHost他们是否有任何建议。也为我工作了!谢谢。
exec("wget http://www.mydomain.com/myscript.php > /dev/null &");