配置程序成为Linux服务
2017-04-20 23:46
447 查看
最近写了个程序需要随Linux启动时自动运行起来, 查了一些方法后, 通过配置程序成为系统的服务实现了这个需求, 在此记录一下.
每5秒, 向/var/log/test_sh.log 输出一个当前时间的字符串, 保存为test_sh
通过以上注释, 可通过
Linux执行等级:
- 等级0表示:表示关机
- 等级1表示:单用户模式
- 等级2表示:无网络连接的多用户命令行模式
- 等级3表示:有网络连接的多用户命令行模式
- 等级4表示:不可用
- 等级5表示:带图形界面的多用户模式
- 等级6表示:重新启动
这一段在/usr/sbin/中检查服务对应的脚本程序是否存在, 并加载/etc/rc.status这个脚本, rc.status脚本中包含了rc_reset, rc_status, rc_failed, rc_reset, rc_exit等有用的命令, 可以通过接受上一条命令的结果, 在service命令执行时显示出不同的效果.
startproc 默认通过程序的绝对路径和
killproc则会通过通过向程序发送SIGTERM来终止程序的运行, 若程序没有响应, 还会依次发送SIGHUP, 以及SIGKILL来删除程序, 确认程序已关闭后吗会删除程序产生的PID文件.
checkproc会检查程序的状态, 根据程序的状态返回不同的值:
- 0: 服务运行中
- 1: 服务停止, 但是/var/run 下的pid文件仍然存在
- 2: 服务停止, 但是/var/lock 下的文件仍然存在
- 3: 服务没有在运行
安装脚本使用install命令来拷贝脚本到指定目录, 并设置对应的权限. chkconfig命令可以将这个自定义的服务添加到设定的执行等级的自启动中, 即在/etc/rc*.d中创建顺序对应的符号链接.
最后在/etc/cron.hourly中创建了一个脚本来每小时自动拉起一次服务, 防止服务意外终止掉. 还可以通过crontab来创建更精确的自动拉起间隔.
以上脚本在SUSE下运行通过, 其他系统的部分命令不一样, 但整体流程应该是差不多的.
参考: http://www.cnblogs.com/bangerlee/archive/2012/03/30/2412652.html
测试程序
#! /bin/sh while [ true ] do echo "[`date +%Y%m%d-%H%M%S`]" >> /var/log/test_sh.log sleep 5 done
每5秒, 向/var/log/test_sh.log 输出一个当前时间的字符串, 保存为test_sh
服务控制脚本
通过此服务控制脚本, 可以实现通过系统的service命令设置这个服务的start, stop, 以及运行status查询状态, 保存为tstd. 服务控制脚本后接d是一种惯例性的命名, 代表daemon.#! /bin/sh # chkconfig: 35 99 99 # descroption: service test script # processname: test_sh ### BEGIN INIT INFO # Provides: tstd # Required-Start: # Should-Start: # Required-Stop: # Should-Stop: # Default-Start: 2 3 5 # Default-Stop: 0 1 2 6 # Description: service test script # ### END INIT INFO
通过以上注释, 可通过
chkconfig或者
insserv命令来安装服务, 指定服务的在Linux的对应的执行等级中自启动以及停止, 并设定启动顺序.
Linux执行等级:
- 等级0表示:表示关机
- 等级1表示:单用户模式
- 等级2表示:无网络连接的多用户命令行模式
- 等级3表示:有网络连接的多用户命令行模式
- 等级4表示:不可用
- 等级5表示:带图形界面的多用户模式
- 等级6表示:重新启动
TEST_BIN='/usr/sbin/test_sh' source /etc/rc.status test -x $TEST_BIN || exit 5 rc_reset
这一段在/usr/sbin/中检查服务对应的脚本程序是否存在, 并加载/etc/rc.status这个脚本, rc.status脚本中包含了rc_reset, rc_status, rc_failed, rc_reset, rc_exit等有用的命令, 可以通过接受上一条命令的结果, 在service命令执行时显示出不同的效果.
case "$1" in start) echo "starting test daemon" startproc $TEST_BIN rc_status -v ;; stop) echo "stop test daemon" killproc $TEST_BIN rc_status -v ;; status) echo "stop test daemon" checkproc $TEST_BIN rc_status -v ;; *) echo "Usage: $0 { start | stop | status }" exit 1 ;; esac
startproc 默认通过程序的绝对路径和
/var/run/<basename>.pid来检索程序是否运行, 没有检索到时便以后台的方式来运行程序.
killproc则会通过通过向程序发送SIGTERM来终止程序的运行, 若程序没有响应, 还会依次发送SIGHUP, 以及SIGKILL来删除程序, 确认程序已关闭后吗会删除程序产生的PID文件.
checkproc会检查程序的状态, 根据程序的状态返回不同的值:
- 0: 服务运行中
- 1: 服务停止, 但是/var/run 下的pid文件仍然存在
- 2: 服务停止, 但是/var/lock 下的文件仍然存在
- 3: 服务没有在运行
安装脚本
#! /bin/sh ROOT_DIR=$(echo $(cd "$(dirname "$0")"; pwd)) echo $ROOT_DIR service tstd stop > /dev/null 2>&1 install -m 750 ${ROOT_DIR}/test_sh /usr/sbin/ install -m 750 ${ROOT_DIR}/tstd /etc/init.d/ chkconfig -a tstd > /dev/null 2>&1 service tstd start > /dev/null 2>&1 echo -e "#!/bin/sh \n service tstd start > /dev/null 2>&1" \ > /etc/cron.hourly/tst_crontab echo 'success'
安装脚本使用install命令来拷贝脚本到指定目录, 并设置对应的权限. chkconfig命令可以将这个自定义的服务添加到设定的执行等级的自启动中, 即在/etc/rc*.d中创建顺序对应的符号链接.
最后在/etc/cron.hourly中创建了一个脚本来每小时自动拉起一次服务, 防止服务意外终止掉. 还可以通过crontab来创建更精确的自动拉起间隔.
以上脚本在SUSE下运行通过, 其他系统的部分命令不一样, 但整体流程应该是差不多的.
参考: http://www.cnblogs.com/bangerlee/archive/2012/03/30/2412652.html
相关文章推荐
- Linux下将Tomcat配置成为系统服务
- linux中基于dhcpd程序配置dhcp服务
- Linux系统常用服务程序配置
- Linux系统 常用服务程序配置
- ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME 2012-12-17 11:27:36 分类: Linux 客户端配置好服务名后,用PL/SQL De
- Linux下将Tomcat配置成为系统服务
- Linux下NFS服务配置
- Linux系统启动引导程序配置文件解析
- ini配置文件在LINUX下面程序打不开?
- Linux配置NTP服务
- Redis 一:Linux下 安装Redis并配置服务
- Linux上VNC服务安装、配置与使用
- LINUX下java串口程序环境配置 分类: LINUX 2010-07-07 10:04 1571人阅读 评论(0) 收藏
- 为linux配置telnet服务
- 转载:Linux 的系统服务及其配置(略有修改)
- linux下ftp服务器vsftpd服务的安装与配置
- Linux上配置FTP服务
- Linux 常用软件和服务的配置网站
- 远程连接linux(Ubuntu配置SSH服务)22端口
- Linux 下的FTP服务-3-vsftpd 常用配置