我有一个Beanstalk MQ,其中我将任务创建为APK,以及一个名为AppBuilder.php的消费者,它从Beanstalk MQ读取消息,然后exec
创建应用程序(Android应用程序)的命令。 / p>
AppBuilder.php是从crontab运行的。这个过程是
exec
来创建流程以下是每个文件的相关代码段:
root crontab就像这样:
* * * * * /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& amp;',$ output,$ resultCode);
如果我直接运行AppBuilder.php,一切正常。但是,从cron来看,它没有。
我已关注this SO Post,并将exec命令修改为以下内容:
exec(' / usr / bin / nohup / usr / bin / sudo / usr / bin / env TERM = xterm / bin / sh /var/www/cgi-bin/appbuilder/oneClickApk.sh& amp; ',$ output,$ resultCode);
然而,事情仍然失败。任何可能出错的线索?我花了很多时间挖掘论坛,没有人帮忙。请帮忙!
编辑1:
crontab运行,AppBuilder.php被初始化,但是在exec命令之后,我看不到进程列表中的oneClickApk.sh
编辑2:
我将crontab从root更改为ec2-user,如评论中所示:仍然无法运行该进程。
答案 0 :(得分:0)
按照下面的第一种方法。但要解决此问题,您必须执行以下操作。
sudo
检查cron-tab帐户是否具有执行PHP应用程序以及shell脚本的适当权限。如果没有将帐户添加到正确的组中,以便它可以运行PHP和shell脚本。
exec('sudo sh /var/www/cgi-bin/appbuilder/oneClickApk.sh &', $output, $resultCode);
使用上面的命令似乎没问题。
在你的shell脚本中输入一个wait命令并检查它是否正常工作。只需首先添加两行,而不添加任何if
条件。如果工作,那么你需要根据你的要求检查你的条件是否满足。
$PHP_CMD /opt/appbuilder/AppBuilder.php &
while (( $(ps -ef | grep "[h]ealth-check.sh" | wc -l) <= 0 ))
do
sleep 5
done
sleep 30