转-shell实现的守护进程

# #! 后面有一个空格,空格后面为解释器的全路径且必须正确。
#! /bin/ash

PRO_PATH=""
# testpro
为要守护的可执行程序,即保证它是一直运行的
PROGRAM="testpro"

# 此脚本一直不停的循环运行,while
<条件> 与 do 放在一行上要在条件后加分号
# if、then、while、do等关键字或命令是作为一个新表达式的开头,
# 一个新表达式之前的表达式必须以换行符或分号(;)来结束
#
如果条件不是单个常量或变量而是表达式的话,则要用[]括起来
#
while、until与for循环皆以do开始以done结束构成循环体
while true ; do
#
休息10秒以确保要看护的程序运行起来了,这个时间因实际情况而定

sleep 10
#
单引号‘‘中的$符与\符没有了引用变量和转义的作用,但在双引号""中是可以的!
#
单引号中如果还有单引号,则输出时全部的单引号都将去掉,单引号括住的内容原样输出。
# 例:echo ‘have ‘test‘‘
--> have test
# ps aux -->
a 为显示其他用户启动的进程;
#                
u 为显示启动进程的用户名与时间;
#                
x 为显示系统属于自己的进程;
# ps aux | grep 可执行程序名
--> 在得到的当前启动的所有进程信息文本中,
#                                           
过滤出包含有指定文本(即可执行程序名字)的信息文本行
# 注:假设 ps aux | grep 可执行程序名
有输出结果,但输出不是一条信而是两条,
#
一个为查找到的包含有指定文本(即可执行程序名字)的信息文本行(以换行符0x10结尾的文本为一行),
# 一个为 grep 可执行程序名 ,即把自己也输出来了,
# 所这条信息是我们不需要的,因为我们只想知指定名字的可执行程序是否启动了
# grep -v 指定文本
--> 输出不包含指定文本的那一行文本信息
# wc -l --> 输出文件中的行数(-l -->
输出换行符统计数)
# ps aux | grep $PROGRAM |
grep -v grep | wc -l -->
如果有指定程序名的程序启动的话,结果大于壹
   
PRO_NOW=`ps aux | grep $PROGRAM | grep -v grep | wc
-l`

# 整数比较:-lt ->
小于,-le -> 小于等于,-gt -> 大于,-ge
-> 大于等于,-eq ->等于,-ne
-> 不等于
# if [条件] 与 then
放在一行上要在条件后加分号
#
如果当前指定程序启动的个数小于壹的话
   
if [$PRO_NOW -lt 1]; then
# 0 -> 标准输入,1
-> 标准输出,2 - > 标准错误信息输出
# /dev/null -->
Linux的特殊文件,它就像无底洞,所有重定向到它的信息数据都会消失!
# 2 >
/dev/null --> 重定向 stderr 到 /dev/null,1
>& 2 --> 重定向 stdout 到
stderr,
# 直接启动指定程序,且不显示任何输出
# 可执行程序后面加空格加&,表示要执行的程序为后台运行
       
./$PROGRAM
2>/dev/null 1>&2
&
# date >>
./tinfo.log -->
定向输出当前日期时间到文件,添加到文件尾端,如果没有文件,则创建这个文件
       
date
>>
./tinfo.log
#
echo "test start" >> ./tinfo.log
--> 定向输出 test start 添加到文件尾端
       
echo "test start"
>> ./tinfo.log
# if 分支结构体结束
   
fi

# 基本与上面的相同,就是多了一个 grep
T,其结果为过滤出含 T 字符的信息行
# T -->
进程已停止,D --> 不可中断的深度睡眠,R --> 进程运行或就绪,S
--> 可接收信号的睡眠,
# X -->
已完全死掉,Z --> 已完全终止
    PRO_STAT=`ps aux|grep $PROGRAM |grep T|grep -v
grep|wc -l`

#
如果指定进程状态为已停止的信息大于零的话
    if [ $PRO_STAT -gt 0 ] ;
then
# killall
--> 用名字方式来杀死进程,-9 -->
即发给程序一个信号值为9的信号,即SIGKILL(非法硬件指令)
#
也可以不指定信号,默认为SIGTERM,即信号值为15
       
killall -9 $PROGRAM
       
sleep 2
       
./$PROGRAM
2>/dev/null 1>&2
&
       
date
>> ./tinfo.log
       
echo "test start"
>> ./tinfo.log
    fi
#
while、until与for循环皆以do开始以done结束构成循环体
done
# exit 用来结束脚本并返回状态值,0 -
为成功,非零值为错误码,取值范围为0 ~ 255。
exit 0

时间: 2024-08-18 10:44:56

转-shell实现的守护进程的相关文章

linux创建守护进程

守护进程deamon 是一个后台进程,无需用户输入就能运行,用来在系统后台提供某种服务. 常见的守护进程有Wbe服务器.邮件服务器以及数据库服务器等等.守护进程不能控制终端,所以任何的输入和输出都需要做特殊处理. 创建守护进程的过程并不复杂,首先执行fork(),将父进程退出. 一个守护进程是从shell脚本或者命令启动,守护进程和应用程序不同的地方是守护进程不是交互式的,它在后台运行,不控制终端. 守护进程既不需要从标准输入设备读入信息,也不需要从标准输出设备输出信息. 下一步是在子进程中调用

和守护进程通信

要和一个守护进程通信,你要向它发送信号,让它以某种方式相应. 例如:强行要求一个守护进程重新读取它的配置文件,或者改变守护进程的行为,或者指示守护进程结束运行. 使用信号与守护进程通信. 守护进程中添加信号捕捉函数 void catch_Signal(int Sign) { switch(Sign) { case SIGTERM: exit(EXIT_SUCCESS); } } 通过shell脚本结束守护进程. #!/bin/sh WHOAMI=`whoami` PID=`ps -u $WHOA

centos7用shell创建守护进程,并设置为系统服务,开机自动启动

首先是创建shell守护进程:(shouhu.sh) #!/bin/bash test(){         while true         do                 ls ./  >> 123.txt                 sleep 5                              done } case $1 in start)         path="/root/shouhu.pid"         if [ -f $p

Shell: nohup守护进程化

如果想在终端会话中启动shell脚本,然后让脚本一直以后台模式运行,直到其完成,即使你退出了终端会话,可以使用nohup命令实现.感觉nohup就是将一个进程初始化为一个守护进程. nohup命令运行了另一个命令来阻断所有发送给该进程的SIGHUP信号.这会在退出终端会话时阻止进程退出. 由于nohup命令会从终端解除进程的关联,进程会丢掉到STDOUT和STDIN的链接,为了保存该命令产生的输出,nohup命令会自动将STDOUT和STDERR的消息重定向到一个名为nohup.out的文件中.

linux shell脚本守护进程监控svn服务

最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在则启动. 创建监控脚本svnmonit.sh #! /bin/sh #进程名字可修改 PRO_NAME=svnserve PORT=58652 REP_DIR=/www/svndata while true ; do #用ps获取$PRO_NAME进程数量 NUM=`ps aux | grep ${

linux下Shell编程--标准的守护进程的启动脚本

一个标准的守护进程的启动脚本: #! /bin/sh WHOAMI=`whoami` PID=`ps -u $WHOAMI | gerp mydaemond | awk '{print $1}'` if (test "$1" = "") then echo "mydaemond [start][stop][version]" exit 0 fi if ( test "$1" = "status") then

shell 脚本实现的守护进程

转自:http://blog.csdn.net/cybertan/article/details/3235722 转自:http://blog.sina.com.cn/s/blog_4c451e0e0100giqg.html 设想:用一个shell查看一个后台运行的PHP程序是否非正常退出 如果退出,利用守护进程自动restart. 类似mysql的safe_mysqld 共3个程序 shstart.sh 负责启动 sh.sh 守护进程主程序 shstop.sh 安全退出守护进程和php程序主体

shell 守护进程

#!/bin/sh #守护进程,接受2个参数 #para CMD 执行的命令 #pare ID 唯一标识改命令 if [ "$1" = "" -o "$2" = "" ];then echo "USAGE:deamon.sh CMD ID" exit 100 fi #创建文件夹 mkdir -p ./var CMD=$1 ID=$2 #守护循环 while [ 1 ] do #执行命令 $CMD &

linux shell守护进程/ rac重启脚本

建立一个守护进程: #! /bin/sh PRO_NAME=./xxxx.sh while true ; do #用ps获取$PRO_NAME进程数量 echo ''> nohup.out NUM=`ps aux | grep -w ${PRO_NAME} | grep -v grep |wc -l` #echo $NUM #少于1,重启进程 if [ "${NUM}" -lt "1" ];then echo "${PRO_NAME} was kil