示例的守护脚本有具有以下功能:

  1. 守护脚本能以daemon模式进行自举
  2. 守护脚本运行期间,将目标程序重启时间节点及其pid记录在日志中
  3. 守护脚本的日志文件名称的末尾是守护脚本的pid
  4. 守护进程启动时会停止当前运行的守护进程
  5. 通过SIGTERM、SIGINT、SIGUSR1关闭守护进程,守护进程会关闭目标程序
  6. 守护进程在关闭守护进程或目标程序时,都会检测指定进程是否是守护进程或目标程序,以防误杀进程
#!/bin/bash
app=unimrcpserver
app_pid=-1p='*/'
script_app=${0##$p}exit_handler()
{if (( ${app_pid} != -1 ));thencounter=`ps -fp ${app_pid}|grep ${app}|wc -l`if (( ${counter} != 0 ));thenkill -s SIGKILL ${app_pid}fiapp_pid=-1waitfiexit
}trap "exit_handler" EXIT SIGUSR1 SIGINT SIGTERM# 进入脚本所在目录
p='/*'
cd "${0%$p}/"log=${app}.start.info.*
p='*.'
for file in ${log};doif test -e ${file};thenid=${file##$p}counter=`ps -fp ${id}|grep ${script_app}|wc -l`if (( ${counter} != 0 ));thenkill -s SIGTERM ${id}firm -rf ${file}sleep 5s;fi
donep='*/'
target="${PWD}/${script_app}"
if (( $# == 0 ));thenbash ${target} 1 </dev/null >/dev/null 2>&1 &exit 0
elif (( $1 != 1 ));thenbash ${target} 1 </dev/null >/dev/null 2>&1 &exit 0
fi
P=".*${PWD}[^:]*/lib(:.*)?"
if [[ ! ${LD_LIBRARY_PATH} =~ $p ]];thenexport LD_LIBRARY_PATH=${PWD}/../lib:${LD_LIBRARY_PATH}
fiP=".*${PWD}[^:]*/lib/iconv(:.*)?"
if [[ ! ${APR_ICONV1_PATH} =~ $p ]];thenexport APR_ICONV1_PATH=${PWD}/../lib/iconv:${APR_ICONV1_PATH}
filog=${app}.start.info.$$
while test 0;dop='/*'"${PWD}/${app}" -c "${PWD%$p}/conf/dirlayout.xml" &app_pid=$!echo "`date`: start ${app}[${app_pid}]">>${log}waitapp_pid=-1
done

单进程程序的守护脚本示例相关推荐

  1. 用inno Setup做应用程序安装包的示例脚本 .iss文件

    用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...

  2. 用inno Setup做应用程序安装包的示例脚本(.iss文件)(

    用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...

  3. linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数

    文章目录 1.显示执行脚本花费的时间 2.在脚本退出时杀死后台运行的程序 3.在脚本退出时跳出循环 4.读取命令行参数来决定循环次数 1.显示执行脚本花费的时间 网址:bash - How to ge ...

  4. PHP中使用redis执行lua脚本示例

    一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当中,来扩展其功 ...

  5. 脚本示例 (Reporting Services)Microsoft Visual Basic .NET

    http://msdn.microsoft.com/zh-cn/library/ms160854(v=sql.90).aspx 脚本示例 (Reporting Services) SQL Server ...

  6. linux中date使用方法,linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...

    linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例) 发布于 2016-02-07 15:58:40 | 108 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一 ...

  7. rcs开机启动mysql_linux添加开机自启动脚本示例详解-阿里云开发者社区

    linux添加开机自启动脚本示例详解 double2li 2017-04-14 1652浏览量 简介: linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的;一.在/etc/r ...

  8. 添加集控程序的守护进程一般操作【Linux,CentOS7.5】

    添加集控程序的守护进程一般操作 1.目的 为防止集控程序(robot.jar,transfer.jar,tomcat)因异常关闭而导致平台无法操作,添加其自动开启守护进程,以便于在非人工干扰的情况下, ...

  9. SpiderMonkey-让你的C++程序支持JavaScript脚本

    译序 有些网友对为什么D2JSP能运行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里.这篇教程手把手教你如何利用SpiderMonkey创建一个能执行JavaScript脚本的 ...

最新文章

  1. 第三章GIT使用入门
  2. 每天一个linux命令:cat
  3. JAVA16版本.JDK16关于TCP和UDP的优化
  4. Javascript 获取url参数,hash值 ,cookie
  5. android 屏幕管理软件,Android Screencast下载
  6. python导出mysql授权语句
  7. 【git】git compare with branch 一样的代码 但是却标识不一样 成块显示 Git 比较 不准确
  8. 天正电气lisp是什么文件_模仿天正电气低压系统图 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  9. 看MASTER围棋有感
  10. 新型开关电源优化设计与实例详解全书.pdf_开关电源工作时,如何抑制纹波和减小高频噪声?...
  11. 树莓派4B(ubuntu)无线网络配置
  12. SteamVR 2.x手部模型、控制器的替换(12)
  13. 删除播放器上的Flowplayer图标
  14. 分享一下我的一些学习方法
  15. HTML5第9节课堂笔记(初探mui,制作手机归属地查询)
  16. springcloud和分布式微服务学习笔记
  17. php ipconfig,ipconfig命令作用是什么?
  18. Perl学习教程大纲
  19. 【PYTHON】如何配置集成开发环境Geany
  20. python字符串去除(中文、英文、数字、标点符号)

热门文章

  1. 请描述计算机硬件故障检测工具的使用,电脑硬件故障检测工具(SyvirPC) v3.00免费版...
  2. 5G网络(接入网+承载网+核心网)
  3. 你了解哪些语音频的标准化组织和相关的国际会议?
  4. 如何报考PMP项目管理认证考试?
  5. ACM菜鸟入门培训1
  6. Teamcenter的BMIDE中LOV配置
  7. 推荐几个 Windows 小工具
  8. 關於RemotelyAnywhere 1326登陸錯誤解決方法
  9. qemu模拟aarch64
  10. 周渝民 、侯佩岑携手演绎《美味的童话》又是新年好片