共计 1745 个字符,预计需要花费 5 分钟才能阅读完成。
今天丸趣 TV 小编给大家分享一下 linux 守护进程实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
linux 下的常驻进程的作用不可忽略,但这里面的问题也不能忽略,怎么启动进程,怎么结束进程,怎么在进程挂掉之后重启进程都要设计的合理。下面看一个 shell 控制的 php 常驻进程的例子。
复制代码 代码如下:
#!/bin/sh
#filename test.sh
# 绝对定位该文件的位置,不随执行目录而变化
cd $(cd $(dirname $0) pwd)
readonly path=$(pwd)/
file=$1;
runfile= ${path}data/${file}.run
diefile= ${path}data/${file}.die
readonly file= ${path}${file}.php
if [! -f $file]; then
echo please select a exists file
elif [! -f $runfile]; then
# 这里进行判断如果 runfile 文件不存在,则表示该进程不存在,下面启动进程
echo $$ ${runfile}
while true
do
if [! -f $diefile]; then
#这里如果 diefile 文件不存在,则表示程序继续执行,否则进入 else,执行退出操作
/usr/bin/php -f ${file}
touch $runfile
sleep 1
else
#如果 diefile 文件存在清除 runfile 和 diefile 退出
if rm -rf $runfile rm -rf $diefile ; then
exit
fi
fi
done
else
# 这里是在存在 runfile 的情况下试图启动该进程
oldpid=`cat $runfile`
newpid=`ps aux | grep process.sh $1 | grep -v grep | grep $oldpid | awk {print $2} `
if [[$oldpid -eq $newpid]]; then
#如果 runfile 中的进程号和正在运行的目标进程号一致,表明一切安好 ^_^
echo the process is runing now
exit
else
#如果用 runfile 中的进程号匹配不到正在运行的目标进程,则表示进程有问题,直接删除 runfile 并结束运行的进程
echo error situation,kill the run process and delete the run file
ps aux | grep process.sh $1 | grep -v grep | awk {print $2} | grep -v $$ | xargs –no-run-if-empty kill
if [$? -eq 0]; then
rm -f $runfile
else
echo $? ${path}/data/error
fi
fi
fi
只里面有几个要强调的地方:
我用这个 shell 去调用 php 程序,这个没有局限性,这里要说明的是这种运行常驻进程的方法
在 runfile 存在,但进程号对不上杀进程时(也就是红色额 else 所执行的地方),一定要 `grep -v $$`,作用是过滤掉当前运行的进程,要不然都被杀掉了,将后面的就不执行了
还有一个要注意的地方就是关于自动重启了
自动重启可以放在 crontab 中,每隔一段时间执行一次,具体情况具体对待。
复制代码 代码如下:
crontab -e
# 打开当前用户日程表,添加模式
# 日程表中有 5 个星号,f1,f2,f3,f4,f5,
# 其中 f1 表示分,f2 表示时,f3 表示日,f4 表示月,f5 表示一个星期第几天
#* 表示每分 / 时 / 日 / 月 / 周天,*/ n 表示每 n 分 / 时 /…… 执行一次
*/2 * * * * /root/test.sh
# 没 2 分钟执行一次
这样一个完整的常驻进程功能就完成了,想要终止进程是只需要在对应的目录下进行 touch ${diefile}即可。
以上就是“linux 守护进程实例代码分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。