在开发的项目的时候是否有这样的顾虑,监听队列任务的命令掉线怎么办?进程死了怎么办?
找个办法看着他。如果他死了就再次启动他。
从另外一个项目哪里学习来的办法。
step1.
通过 linux的ps命令看看这个进程是否在运行,如果没有运行就启动他。如果运行就不管
step2.
检查计划任务里是否有我们的计划任务,如果没有就创建一个,每分钟去检查一次。
#!/bin/bash
phppath="/usr/local/php/bin/php"
basepath=$(cd `dirname $0`; pwd)
chmod a+x "$basepath/think"
command="$basepath/think queue:listen"
result=$(ps -ef | grep "`echo $command`" |grep -v "grep")
if [ ! -n "$result" ]
then
echo "Starting the process."
time3=$(date "+%Y-%m-%d %H:%M:%S")
echo $time3
cd $basepath
#/usr/local/php/bin/php
str=$(nohup $phppath $command >/dev/q3 2>&1 &)
echo -e "\033[32mOk.\033[0m"
else
echo "The process has been started."
fi
result=$(crontab -l|grep -i "* * * * * $basepath/queue.sh"|grep -v grep)
if [ ! -n "$result" ]
then
echo -e "\033[32mCreating queue crontab.\033[0m"
echo "Export crontab data"
crontab -l > createcrontemp
echo "Add new crontab line"
echo "* * * * * $basepath/queue.sh" >> createcrontemp
echo "Import crontab data"
crontab createcrontemp
echo "Delete temp file"
rm -f createcrontemp
echo -e "\033[32mCreating queue crontab success.\033[0m"
else
echo "The queue crontab has been add ."
fi
前半段是检查queue是否在执行,如果没有就启动 line 6: command = ....
后半段是检查有没有在计划任务中,如果没有就加一条进去。确保每分钟会执行一次该文件。
注意line 3: 由于该命令放到crontab后一直不执行,不得不加上php的路径。