单进程程序的守护脚本示例
示例的守护脚本有具有以下功能:
- 守护脚本能以daemon模式进行自举
- 守护脚本运行期间,将目标程序重启时间节点及其pid记录在日志中
- 守护脚本的日志文件名称的末尾是守护脚本的pid
- 守护进程启动时会停止当前运行的守护进程
- 通过SIGTERM、SIGINT、SIGUSR1关闭守护进程,守护进程会关闭目标程序
- 守护进程在关闭守护进程或目标程序时,都会检测指定进程是否是守护进程或目标程序,以防误杀进程
#!/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
单进程程序的守护脚本示例相关推荐
- 用inno Setup做应用程序安装包的示例脚本 .iss文件
用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...
- 用inno Setup做应用程序安装包的示例脚本(.iss文件)(
用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...
- linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数
文章目录 1.显示执行脚本花费的时间 2.在脚本退出时杀死后台运行的程序 3.在脚本退出时跳出循环 4.读取命令行参数来决定循环次数 1.显示执行脚本花费的时间 网址:bash - How to ge ...
- PHP中使用redis执行lua脚本示例
一.引言 redis学了一段时间了,基本的东西都没问题了.从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当中,来扩展其功 ...
- 脚本示例 (Reporting Services)Microsoft Visual Basic .NET
http://msdn.microsoft.com/zh-cn/library/ms160854(v=sql.90).aspx 脚本示例 (Reporting Services) SQL Server ...
- linux中date使用方法,linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...
linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例) 发布于 2016-02-07 15:58:40 | 108 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一 ...
- rcs开机启动mysql_linux添加开机自启动脚本示例详解-阿里云开发者社区
linux添加开机自启动脚本示例详解 double2li 2017-04-14 1652浏览量 简介: linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的;一.在/etc/r ...
- 添加集控程序的守护进程一般操作【Linux,CentOS7.5】
添加集控程序的守护进程一般操作 1.目的 为防止集控程序(robot.jar,transfer.jar,tomcat)因异常关闭而导致平台无法操作,添加其自动开启守护进程,以便于在非人工干扰的情况下, ...
- SpiderMonkey-让你的C++程序支持JavaScript脚本
译序 有些网友对为什么D2JSP能运行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里.这篇教程手把手教你如何利用SpiderMonkey创建一个能执行JavaScript脚本的 ...
最新文章
- Spring Boot Maven插件
- Maven项目提示:源值1.5已经过时,将在未来发行版中删除
- 一个简单的反射拷贝一份新的实体类
- textarea实现datalist效果_手把手撸代码实现Virtual Dom amp;amp; Diff
- UML 面向对象分析与设计
- Python 之数据类型
- 安装nginx时关系依赖库openssl.lib时,出现:error: 'NR_syscalls' undeclared (first use in this function)
- markdown语法中的空格_Markdown实用技巧-基础语法
- 10. 大型网站核心架构要素
- Java为何大行其道
- 泰格收银系统_泰格超市收银系统
- Docker 容器学习完整笔记
- bat批处理之for循环
- css边框图片border-image切图原理
- 书摘—松下幸之助全传
- 完全卸载 OneDrive / 重装 OneDrive / 解决“已经安装了 OneDrive”
- GNSS定位系统开发
- WINDOWS系统还原后原来多个分区合并为一个分区后怎么恢复数据?
- 【PostgreSQL实战】之还原备份文件
- mysql数据表操作_MySQL数据表基本操作实例详解