您的位置:首页 > 运维架构 > Shell

shell脚本实现程序重启

2017-11-06 20:11 232 查看
最近做的ipc端HLS推流不稳定偶尔要宕机,而云服务器又希望能随时连上ipc。在ipc端有没有supervisor这种工具,就需要自己想下怎么然异常退出的程序重启起来。经过查阅网络资料,通过shell即可实现。

#!/bin/sh
help(){
echo "Usage: $0 <process_name>"
exit 0
}

# 参数范围检查
if [ "$#" != 1 ];
then
help
fi

#检查进程实例是否已经存在
while [ 1 ]; do
PID=`pgrep ${1}`
if [ -z "$PID" ]
then
echo "restart process: $1 and date is: `date`"
exec ./${1} &
fi
#循环检测时间
sleep 2
Done


一些说明

1 #!/bin/sh

Shell脚本中用#表示注释,相当于C语言的//注释。但如果#位于第一行开头,并且是#!(称为Shebang)则例外,它表示该脚本使用后面指定的解释器/bin/sh解释执行

2.函数定义

shell中函数的定义格式如下:

函数名(){
command1
commandN
[ return value ]
}


用函数时可以向其传递参数。在函数体内部,通过 n的形式来获取参数的值1 2当n>=10时,需要使用{n}来获取参数。

3 .

echo 打印命令

exit 为退出脚本

4 if [] then else fi 语句

在Shell中用if、then、elif、else、fi这几条命令实现分支控制。

If []
then
xxx(满足条件执行语句)
else
Xxx
fi


如果两条命令写在同一行则需要用; 如果一行只写一条命令就不需要写;号了

:是一个特殊的命令,称为空命令,该命令不做任何事。

代码中实现的功能为:

$#:添加到Shell的参数个数。如果参数不是1即调用 help

5.循环

While[循环条件]
do
.....
Done 之间为循环内容


6 pgrep

pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id

PID=
pgrep ${1}
查找参数1传入进程名 并将并赋值给PID

if [ -z “$PID” ]

-z 字符串长度为0 即为真,即pgrep 没有找到参数传入进程名的pid,调用exec重新执行目标程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 程序重启 异常