PHP`exec()`不';如果由Cron启动的进程运行,则无法工作
我有一个Beanstalk MQ,我把任务放在其中创建APK,还有一个名为AppBuilder.php的使用者,它从Beanstalk MQ读取消息,然后是PHP`exec()`不';如果由Cron启动的进程运行,则无法工作,php,bash,shell,cron,Php,Bash,Shell,Cron,我有一个Beanstalk MQ,我把任务放在其中创建APK,还有一个名为AppBuilder.php的使用者,它从Beanstalk MQ读取消息,然后是exec创建应用程序的命令(android应用程序) AppBuilder.php是从crontab运行的。过程是 Crontab运行health-check.sh shell脚本 health-check.sh在后台运行AppBuilder.php AppBuilder.php调用exec来创建流程 以下是每个文件中的相关代码段: 根cro
exec
创建应用程序的命令(android应用程序)
AppBuilder.php是从crontab运行的。过程是
exec
来创建流程* * * * * /opt/cron/health-check/health-check.sh
health-check.sh是这样的:
#!/bin/bash
PATH=$PATH:/sbin/
#HEALTH CHECK FOR AppBuilder Daemon
if (( $(ps -ef | grep "[A]ppBuilder" | wc -l) > 0 ))
then
echo "AppBuilder is Running"
else
echo "AppBuilder is Stopped, attempting to restart"
$PHP_CMD /opt/appbuilder/AppBuilder.php &
if pgrep "AppBuilder" > /dev/null
then
echo "AppBuilder is now Running"
else
echo "AppBuilder is still not Running"
fi
fi
AppBuilder.php具有以下exec命令:
exec('sudo sh/var/www/cgi-bin/appbuilder/oneClickApk.sh&',$output,$resultCode)
如果我直接运行AppBuilder.php,一切正常。但是,从cron来看,它不是
我遵循了,并将exec命令修改为:
exec('/usr/bin/nohup/usr/bin/sudo/usr/bin/env TERM=xterm/bin/sh/var/www/cgi-bin/appbuilder/oneClickApk.sh&',$output,$resultCode)
然而,事情还是失败了。有任何线索表明这可能会出错吗?我花了很多时间挖掘论坛,一点帮助都没有。请帮忙
编辑1:
crontab运行,AppBuilder.php被初始化,但是在exec命令之后,我在进程列表中看不到oneClickApk.sh
编辑2:
我将crontab从root用户更改为ec2用户,正如注释中所建议的那样:进程仍然没有运行。只需遵循下面的第一种方法即可。但要解决这个问题,您必须执行以下操作
sudo
exec('sudo sh /var/www/cgi-bin/appbuilder/oneClickApk.sh &', $output, $resultCode);
条件的前提下添加两行即可。如果工作,那么你需要检查你的条件,如果他们不符合你的要求
$PHP_CMD /opt/appbuilder/AppBuilder.php &
while (( $(ps -ef | grep "[h]ealth-check.sh" | wc -l) <= 0 ))
do
sleep 5
done
sleep 30
$PHP\u CMD/opt/appbuilder/appbuilder.PHP&
虽然($(ps-ef | grep“[h]ealth check.sh”| wc-l)尝试添加/bin/sh
,(例如/bin/sh/opt/cron/health check/health check.sh
)不起作用。您能告诉我为什么建议这样做吗?因为/opt/cron/health check/health check.sh
不是有效的命令(尝试一下,它可能会返回未找到的命令).Cron在没有有效命令的情况下不知道该做什么。因此,放置/bin/sh
,sh
或者甚至执行/opt/Cron/health check/health check.sh
应该可以正确运行该命令。它的可执行文件,因此它可以运行ls-la/opt/Cron/health check/health-check.sh-rwxrwxr-x 1 ec2用户ec2用户4346 Apr 17 12:11/opt/Cron/health check/health check.sh这很好,但是如果不在它前面放一个命令,它仍然无法执行。为什么从shell运行AppBuilder.php会起作用,但从crontab运行同样的事情不会起作用(现在,crontab是从同一个linux用户-ec2用户运行的)?正如我在回答中所说的,您是否检查了是否提供了像/app/php/AppBuilder.php那样的完整路径?像这样的完整路径在哪里?我已经修改了我的答案。请查看最后一个选项,然后先做一个测试。有了这个“等待”,它就工作了。但是,当我停止新创建的包含等待的脚本时,exec进程也停止了