一、守护进程的定义
在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
二、守护进程的用途
在日常使用当中,有些linux程序进程是必须长期存在,如果进程由于出错或者某种原因终止了,应该要能自我恢复。譬如说一些公司的网站后台程序,必须24小时要保证正常运转,虽然一般都有专人负责服务器的维护,但维护人员总有离开服务器的时候。这时就需要守护进程了,只要能够监控到服务器程序崩溃了,守护程序就能及时地重启服务程序。
三、守护进程的编程
一般编写守护进程要用到linux下面的C编程,操作起来稍微复杂,不适用于维护人员。我在这里只说bash的编写方式。
bash版的守护进程和实际意义的守护进程是有点不一样的,属于伪守护进程,但一样能达到守护进程的作用:能独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
打开终端输入:
vim bash-deamon.sh
在里面输入下面的代码
#!/bin/sh
while true;
do
count=$(ps -ef | grep -c server) #查找当前的进程中,计算server程序的数量
if [ $count -lt 3 ]; then #判断服务器进程的数量是否小于3(根据实际填上你的服务器进程数量)
server start #这里填入需要重启的服务器进程
fi
sleep 2 #睡眠2s,周期性地检测服务器程序是不是崩溃了
done
把上面的代码保存,运行的时候在后面加上“&”符号,目的是让这个脚本脱离终端运行:
bash bash-deamon.sh &
以后假如服务器程序崩溃了,守护进程就会帮你重启服务器程序,非常方便。
四、小结
bash版的守护进程的实现方式非常简单,只需几行脚本即可,简单快捷地自动重启服务器。
我本人比较少用bash编程,刚开始写的时候有点摸不着头脑,不知道如何获取变量的值(ps -ef | grep -c server),后来才知道需要加入”$”符号才能获取命令的返回结果。还有比较数字大小的时候,以为要用“><=”这些符号表示,结果一直都不对,后来才知道需要用正则表达式。
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
参考资料:
1. bash shell while语法 。
2. linux 程序定时重启脚本。
3.linux shell中 if else以及大于、小于、等于逻辑表达式介绍 。
4.守护进程–百度百科
5.守护进程的创建方法和步骤。
6. BASH命令之乐(3)之grep 。
7.bash shell脚本执行的几种方法。