1、自制脚本服务
#!/bin/sh
#
#author cheung
#
#chkconfig:345 20 80
#description Test
PID_FILE=/var/run/TestServer.pid
DAEMON=/root/TestServer
EXEC=TestServer
#Source Function library
./etc/init.d/functions
start()
{
echo "script starting $EXEC……"
$DAEMON > /dev/null
pidof $EXEC > $PID_FILE
sleep 10
echo "Starting $EXEC :[OK]"
}
stop()
{
echo "script Stoping $EXEC……"
killall $DAEMON > /dev/null
rm -f $PID_FILE
sleep 10
echo "Shutting down $EXEC :[OK]"
}
restart()
{
start
stop
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p $PID_FILE $DAEMON
;;
*)
echo "Usage: service $EXEC {start|stop|status|restart}"
exit 1
esac
exit $?
#chkconfig后面三个参数分别表示服务在哪几个运行级别启动(本例是在3,4,5),20与80是在启动和关闭时服务脚本执行的优先级。#description是对该服务的描述。加上这两行之后才能用。使用chkconfig --add X将自己写的脚本变成服务,脚本同样需要在/etc/init.d中。/etc/rc.d/init.d/functions这个脚本中包含了下面要用到的status这个函数,其用来打印当前服务进程的状态,其需要参数为PID与程序路径。pidof用于查询程序的PID值(查看脚本的PID的,可以发现通过不含路径的脚本文件名称、或者执行时的路径来查看)。sleep是秒为单位,usleep是以微秒为单位(百万分之一秒);
还可使用以下方法:
1、将需要开机启动的脚本(一般为自己写的脚本)存放于/etc/init.d/中,/etc/rc.d/init.d/中自动会生成一个相同。
cp X.sh /etc/init.d X
ln -s /etc/init.d/X /etc/rc.d/rc[?].d/SNNX
在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0~6七个运行级别之一),S代表启动,NN代表启动数字,数字越小越早启动。此方法适用自己写的脚本,此方法制作后可使用service X start来启动X脚本(所有步骤较麻烦)
2、在/etc/rc[2~5].d目录下都会有一个S99local,这是一个指向/etc/init.d/rc.local的链接,可以看 出,在正常的2~5级别启动的最后都会调用这个rc.local,而/etc/init.d/rc.local中又会检查是否存在/etc /rc.local,并运行之,因此,我们就可以在/etc/rc.local中写入代码,来随系统启动某些程序,实现类似服务的功能。
3、对于有些程序安装后就有服务,此时用chkconfig X on开启,chkconfig --level 345 X指定运行级别即可。
########相关知识########
系统启动流程:
加电,硬件检测。
BISO(Basic Input/Output System),硬件信息获取。
MBR(master boot record),引导、硬盘分区
bootloader,initrd再次检测硬件,初始化硬件。
Kernel,系统核心。
/sbin/init,读取/etc/inittab用于设定运行等级(可打开inittab文件进行查看)。
/sbin/init,执行/etc/rc.d/rc.sysinit用于设置PATH、网络等。
执行不同运行级别脚本(rc0.d到rc.6.d),完成初始化和启动相应服务。
当一切初始化完成后,执行/etc/rc.d/rc.local。
执行/bin/login。
rc*.d、rc、rc.local、rc.sysinit区别
rc*.d文件表示各运行级别文件夹,其中KNN代表stop使用,SNN代表start使用(NN代表相对运行顺序,越小越早运行)。
rc用于执行调用对应rc*.d文件。
rc.local记录需要在初始化完成执行的信息。
rc.sysinit记录PATH、网络等信息。
不同的运行级定义如下
# 0 - 停机(千万不能把initdefault 设置为0 )
# 1 - 单用户模式 # s init s = init 1
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 多用户图形模式(xwindow)
# 6 - 重新启动 (千万不要把initdefault 设置为6 )
这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rc[?].d 目录。(这里的? 就是运行级0-6)
CentOS5为例,系统中默认init是使用/etc/inittab文件的,然后读取/etc/rc.sysinit,再根据运行级别进入/etc/rc[?].d。其中,/etc/rc.sysinit是指向/etc/rc.d/rc.sysinit的链接,/etc/rc[?].d是指向/etc/rc.d /rc[?].d的链接,/etc/rc.local是指向/etc/rc.d/rc.local的链接,所以系统启动的顺序就变成如下:内核 → /etc/inittab → /etc/ rc.sysinit(/etc/rc.d/rc.sysinit)
→ /etc/rc[?].d(/etc/rc.d/rc[?].d) → /etc/rc.local(/etc/rc.d/rc.local)