我有一个Beanstalk MQ,其中我将任务创建APK,以及一个名为AppBuilder.php的消费者,它从Beanstalk MQ读取消息,然后 exec
创建App(Android应用程序)的命令 .
AppBuilder.php是从crontab运行的 . 这个过程是
-
Crontab运行health-check.sh shell脚本
-
health-check.sh在后台运行AppBuilder.php
-
AppBuilder.php调用
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&',$ 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&',$ output,$发送resultCode);
然而,仍然失败了 . 任何可能出错的线索?我花了很多时间挖掘论坛,没有人帮忙 . 请帮忙!
编辑1:
crontab运行,AppBuilder.php被初始化,但是在exec命令之后,我在进程列表中看不到oneClickApk.sh
编辑2:
我将crontab从root更改为ec2-user,如评论中所示:仍然无法运行该进程 .
1 回答
只需按照下面的第一种方法 . 但要解决此问题,您必须执行以下操作 .
检查您的cron-tab条目是否正确设置 .
在cron-tab中提供可执行文件的完整路径
检查cron-tab用户帐户是否具有正确的设置以执行
sudo
检查cron-tab帐户是否具有执行PHP应用程序和shell脚本的适当权限 . 如果没有将帐户添加到正确的组中,以便它可以运行PHP和shell脚本 .
使用上面的命令它似乎没问题 .
在你的shell脚本中输入一个wait命令并检查它是否正常工作 . 只需添加两行以下,而不添加任何
if
条件 . 如果工作,那么你需要根据你的要求检查你的if条件为什么不满意 .