chkconfig管理的init.d脚本文件编写

环境: Centos 7 X64

使用 chkconfig --add 添加的服务,同样可以通过[systemctl] 来查看信息,使用[systemctl daemon-reload] 刷新服务,此init.d脚本就像 shell 一样编写,没必要自己手动在[/lib/systemd/system] 下添加 service 文件

例子:/etc/init.d/zookeeper

!/bin/sh
# Zookeeper Server
# chkconfig: - 85 15
# description: Zookeeper 服务
#
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
zkServer="/data/server/zookeeper/bin/zkServer.sh"
zkConfig="/data/server/zookeeper/conf"
prog=$(basename $zkServer)
start() {
[ -x $zkServer ] || exit 5
echo -n $"Starting $prog: "
daemon $zkServer --config $zkConfig start
retval=$?
echo
[ $retval -eq 0 ]
return $retval
}
stop() {
echo -n $"Stopping $prog: "
$zkServer --config $zkConfig stop
retval=$?
echo
[ $retval -eq 0 ]
return $retval
}
status() {
echo -n $"Status $prog: "
$zkServer --config $zkConfig status
}
restart() {
stop
sleep 3
start
}
case "$1" in
start)
$1
;;
stop)
$1
;;
restart)
$1
;;
status)
#netstat -tunlp | grep 2181
$1
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 2
esac

主要两个指令

chkconfig: 后面的三个数字含义:
数字1 : 启动级别,如果使用[-],则在--add完成后,使用 --level来开启
数字2 : 启动顺序,chkconfig 根据此值来启动服务
数字3 : 停止顺序, 在关闭服务时,此服务的关闭顺序
description: 描述此服务的信息,可以使用 '\' 为实现多行

上面例子的脚本在使用 --add 添加后,其service 文件名【 /run/systemd/generator.late/zookeeper.service 】和 init.d 目录下的脚本文件名对应, 生成的 service 文件内容为:

# Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/zookeeper
Description=SYSV: Zookeeper 服务
Before=shutdown.target
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/zookeeper start
ExecStop=/etc/rc.d/init.d/zookeeper stop

例子2:

#!/bin/bash
### BEGIN INIT INFO
#Provides: Rojers
#Required-Start: $network # 需要 network 服务启动之后,再启动
#Required-Stop: $network
#Default-Start: 2 3 4 5
#Default-Stop: 0 1 6
#Short-Description: 测试
#Description: init 脚本测试
### END INIT INFO
t_file=/tmp/rojer.file
case "$1" in
start)
echo "Start Rojers"
su www -c touch $t_file
# su 可以指定运行此程序时的用户
;;
stop)
echo "Stop Rojers"
touch $t_file
;;
reload)
echo "Reload Rojers"
touch $t_file
;;
*)
echo "Usage: $0 "
;;
esac
exit 0

例2生成的service文件内容为:

Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/rojers
Description=LSB: 测试
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/rojers start
ExecStop=/etc/rc.d/init.d/rojers stop

关键指令:

BEGIN INIT INFO
END INIT INFO
这两个是标记 init 信息的开始与结束,最好加上

Provides # 名字

Required-Start # 需要在哪些服务启动之后,再运行自己

Required-Stop # 在哪些服务关闭之后,关闭自己

Default-Start # 默认的运行级别

Default-Stop # 默认的关闭级别,即:在此级别不运行

Short-Description # 简短描述

Description # 完整描述