创建自定义Linux服务(原创)
概述
网上有不少关于如何让Linux自动运行自己编写的脚本或者程序的方法,但是大多数都是把命令写到/etc/rc.d/rc.local或者/etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像MySQL,apache等服务一样能够使用service命令或者调用init.d下的脚本启动、关闭或者重启进程。例如,
service mysql restart
service apache2 stop
或者
/etc/init.d/mysql restart
/etc/init.d/apache2 stop
同时也无法整合入heartbeat这样的高可用程序中进行监控。因此,创建自定义的linux服务还是有其必要性的。
因为不同的Linux发行版本,对后台服务的处理方式不大一样,所以下面以RHEL系统为例,编写一个Oracle随机启动服务。
创建服务
服务脚本
cat /etc/init.d/czm
#!/bin/bash
# chkconfig: 2345 20 81
#description: czmmmmm
export ORACLE_SID=orcl
export ORACLE_PID=`ps -ef|grep ora|grep -E smon|pmon|ckpt|wc -l`
export ORACLE_BASE=/u01/app
export ORACLE_HOME=/u01/app/oracle
export PATH=$PATH:$ORACLE_HOME/bin
ORA_OWNR="oracle"
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup:cant start"
exit 1
fi
case "$1" in
start)
echo -n "Starting Oracle:"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbstart"
echo "OK"
;;
stop)
echo -n "Shutdown Oracle:"
su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbshut"
echo "OK"
;;
status)
if [ $ORACLE_PID = "3" ];then
echo "Oracle Instance is running..."
else echo "Oracle Instance is not running..."
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage:`basename $0` start|stop|status|restart"
esac
exit $?
脚本说明
#!/bin/bash,声明脚本采用bash作为shell。#chkconfig后面三个参数分别表示服务在哪几个运行级别启动(本例是在2,3,4,5),在启动和关闭时服务脚本执行的优先级。#description是对该服务的描述。加上这两行之后才能用chkconfig命令添加服务。另外,服务脚本最好放在/etc/init.d/目录下
一个linux服务脚本必须包含start,stop和restart,而status不是必须的。关于status有两种方式实现以查看程序的运行状态,一种为上文提到的根据程序的特点自行编写判断脚本,另一种则是利用linux自带的/etc/init.d/functions这个脚本中包含了下面包含的status函数,来打印当前服务进程的状态,当然前提是运行的程序能够产生pid文件 ,代码如下
#!/bin/bash
# autoruntest the shell script takes care of autoruntest auto start and stop
# chkconfig: 2345 20 80
# description: autoruntest
# processname: /etc/rc.d/init.d/autoruntest
EXEC_PATH=/home/paradis/app
EXEC=autoruntest
PID_FILE=/var/run/autoruntest.pid
DAEMON=/home/paradis/code/autoruntest
# Source function library.
. /etc/rc.d/init.d/functions
if ! [ -x $EXEC_PATH/$EXEC ] ; then
echo "ERROR: $EXEC_PATH/$EXEC not found"
exit 1
fi
stop()
{
echo "Stoping $EXEC ..."
killall $DAEMON /dev/null
usleep 100
echo "Shutting down $EXEC: [ OK ]"
rm -f /var/lock/subsys/Oracle
}
start()
{
touch /var/lock/subsys/Oracle
echo "Starting $EXEC ..."
$DAEMON /dev/null
usleep 100
echo "Starting $EXEC: [ OK ]"
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status -p $PID_FILE $DAEMON
;;
*)
echo "Usage: service $EXEC {start|stop|restart|status}"
exit 1
esac
exit $?
两点说明
1、/var/run
根据linux的文件系统分层结构标准(FHS)中的定义:
/var/run目录中存放的是自系统启动以来描述系统信息的文件。比较常见的用途是daemon进程将自己的pid保存到这个目录。FHS标准要求这个文件夹中的文件必须是在系统启动的时候清空,以便建立新的文件。
为了达到这个要求,某些linux中/var/run使用的是tmpfs文件系统,这是一种存储在内存中的临时文件系统,当机器关闭的时候,文件系统自然就被清空了。使用df -Th命令能看到类似的输出结果:
文件系统 类型 容量 已用 可用 已用%% 挂载点
none tmpfs 990M 384K 989M 1% /var/run
none tmpfs 990M 0 990M 0% /var/lock
当然/var/run除了保存进程的pid之外也有其他的作用,比如utmp文件,就是用来记录机器的启动时间以及当前登陆用户的。
2、/var/lock/subsys
/var/lock/subsys/目录表示文件是否上所,通常与/var/run目录结合使用以判断程序是否进行
参考至:http://blog.csdn.net/q191201771/article/details/6134512
http://space.itpub.net/26442672/viewspace-715235
http://www.508648.com/post-5.html
http://www.cnblogs.com/silverwings/archive/2010/08/02/1790801.html
http://xiaoxia.org/2011/11/15/create-a-simple-linux-daemon/
http://www.hao32.com/unix-linux/39.html
http://hi.baidu.com/naruto6006/item/3bf69a234ed390142a0f1cdd
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com
Linux网络服务之DNS服务 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互 映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
相关文章
- Linux 查看端口占用情况
- [Linux] Linux软连接和硬链接
- Linux命令行修改IP、网关、DNS、主机名 的方法
- linux系统方面的知识
- oracle10g 手动创建数据详解(linux)下
- Linux Autofs自动挂载服务详解
- Linux 系统线程数量上限是多少?
- atitit.添加win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
- 【项目实战】Linux中root用户的密码不符合复杂性的要求?
- 手把手带你基于嵌入式Linux移植samba服务
- 【华为云技术分享】Linux软件安装的几种方法 (一)—— apt-get
- linux shell 中"2>&1"含义
- Linux脚本之定时清空文件内容
- Linux系统之部署ZFile在线网盘服务
- Linux系统下SSH服务启动失败故障处理
- Linux下的samba服务配置详解
- linux服务篇-HTTP服务
- 嵌入式linux开发,连接busybox的telnetd服务,报错:telnet: Unable to connect to remote host: Connection refused
- linux上保护SSH服务 8种方式—— 筑梦之路
- Parallels虚拟机kali linux 启动ssh服务 容许root远程登陆
- 第六章 linux-设备树一
- Linux下可以替代windows的软件汇总:(不断完善中)
- linux 查看CPU、内存、磁盘信息命令
- Linux 使用docker搭建MySQL服务的一些细节问题
- Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务 命令详解
- linux服务篇-HTTP服务
- linux I2C驱动4种读写方法