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

  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. Spring Boot Maven插件
  2. Maven项目提示:源值1.5已经过时,将在未来发行版中删除
  3. 一个简单的反射拷贝一份新的实体类
  4. textarea实现datalist效果_手把手撸代码实现Virtual Dom amp;amp; Diff
  5. UML 面向对象分析与设计
  6. Python 之数据类型
  7. 安装nginx时关系依赖库openssl.lib时,出现:error: 'NR_syscalls' undeclared (first use in this function)
  8. markdown语法中的空格_Markdown实用技巧-基础语法
  9. 10. 大型网站核心架构要素
  10. Java为何大行其道
  11. 泰格收银系统_泰格超市收银系统
  12. Docker 容器学习完整笔记
  13. bat批处理之for循环
  14. css边框图片border-image切图原理
  15. 书摘—松下幸之助全传
  16. 完全卸载 OneDrive / 重装 OneDrive / 解决“已经安装了 OneDrive”
  17. GNSS定位系统开发
  18. WINDOWS系统还原后原来多个分区合并为一个分区后怎么恢复数据?
  19. 【PostgreSQL实战】之还原备份文件
  20. mysql数据表操作_MySQL数据表基本操作实例详解

热门文章

  1. AgileConfig 一个轻量级配置中心
  2. 爱心宠物诊所系统(实训)
  3. 取消SIM卡槽,eSIM为防盗带来新转机,手机防盗终极大招
  4. html5中底部对齐怎么写,css设置元素底部垂直对齐
  5. Goby在护网中的应用
  6. 最新最酷Android手机游戏灵活的球球代码
  7. 网站分布式技术有哪些?
  8. 必收藏!计算机保研时间轴!
  9. Golang基础知识与常见问题
  10. 云计算浅谈之二:云计算介绍(2)