开始学习
shell 脚本示例
守护进程服务脚本
Linux 系统的 /etc/init.d 目录下有许多脚本,这些脚本通常是将某个守护进程包装成一个服务,定义了该守护进程在启动、重启和停止时的具体行为。这样做的好处是,用户在启动相应服务时不用进行太复杂的配置,在停止该服务时也能该根据脚本设置释放相关资源,还可以将服务设置成开机自动启动。
这种服务脚本遵循特定的格式,下面是一个示例模板,可以在 GitHub 找到。
#!/bin/sh
# Start/stop the test daemon.
#
### BEGIN INIT INFO
# Provides: test
# Required-Start: $remote_fs $syslog $time
# Required-Stop: $remote_fs $syslog $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Execute the test command.
# Description: Test templates
### END INIT INFO
do_start() {
echo "start"
}
do_stop() {
echo "stop"
}
do_restart() {
echo "restart"
}
do_status() {
echo "status"
}
do_fallback() {
echo "fallback"
}
case "$1" in
start) do_start
;;
stop) do_stop
;;
restart) do_restart
;;
status) do_status
;;
*) do_fallback
;;
esac
exit 0
脚本开头部分是头部信息,除了介绍该服务的功能,还包含一些重要的信息。包括:
- Required-Start 列出在启动该服务之前,系统必须启动的其他服务;
- Required-Stop 列出必须在该服务结束之后才能结束的服务;
- Default-Start 和 Default-Stop 列出该服务的默认运行级别。
运行级别(Runlevel)是指 Linux 操作系统下不同的运行模式,通常分为 7 个等级,分别是从 0 到 6。定义如下:
- 0 停机,关机
- 1 单用户,无网络连接,不运行守护进程,不允许非超级用户登录
- 2 多用户,无网络连接,不运行守护进程
- 3 多用户,正常启动系统
- 4 用户自定义
- 5 多用户,带图形界面
- 6 重启
脚本的主体程序包含一个 case 分支结构,可以接收启动(start)、停止(stop)、重启(restart)和状态查询(status)等参数,并采取相应的动作。将该 test 脚本放到 /etc/init.d 目录,用户可以通过 service 命令手动切换脚本状态,例如:
$ sudo service test start
如果想设置开机自动启动,还需要在 /etc/rcN.d 目录下创建软链接(N 为运行级别),才能让该服务在 N 运行级别时开机启动。不用担心,Linux 系统为用户提供了 update-rc.d 命令完成这一工作。