工控机使用SysVinit 启动脚本
SysVinit 启动脚本详细介绍
1. 什么是 SysVinit?
- SysVinit 是传统的 Linux 初始化系统(init system),负责系统启动时初始化各种服务和进程。
- 它通过
/etc/inittab文件控制启动流程,执行一系列启动脚本完成系统初始化。 - 主要用于 Linux 早期发行版,现在很多系统改用
systemd,但很多裁剪版或嵌入式系统仍用 SysVinit。
2. SysVinit 的启动脚本体系
-
启动脚本一般放在
/etc/init.d/目录,每个脚本负责启动、停止某个服务。 -
启动脚本通过符号链接放在
/etc/rcX.d/目录(X是运行级别,0~6),决定该服务在哪些运行级别自动启动或停止。 -
启动脚本命名规则:
SNNname:启动脚本(S 开头,NN 是启动顺序数字,数字越小越先启动)KNNname:停止脚本(K 开头,NN 是停止顺序数字,数字越小越先停止)
3. 运行级别(Runlevels)
-
Linux 定义了多个运行级别(runlevel),常见的有:
0:关机(halt)1:单用户模式(维护模式)2~5:多用户模式(具体定义依发行版而异)6:重启
-
通过运行级别切换,系统启动或关闭不同的服务。
4. 启动流程简述
- 系统启动后,
init进程读取/etc/inittab,确定默认运行级别。 - 执行对应运行级别的启动脚本,比如
/etc/rc3.d/。 - 按顺序执行启动目录里的
S*脚本,启动服务。 - 系统关闭时,执行相应的
K*脚本停止服务。
5. 启动脚本的编写规范
5.1 脚本的位置
- 放在
/etc/init.d/,文件名一般对应服务名。
5.2 必须实现的参数
启动脚本一般接收以下参数:
start:启动服务stop:停止服务restart:重启服务(先停止再启动)status(可选):查看服务状态
5.3 脚本结构示例
#!/bin/sh
# 服务名:示例服务
case "$1" in
start)
echo "Starting service..."
# 启动命令
;;
stop)
echo "Stopping service..."
# 停止命令
;;
restart)
$0 stop
sleep 1
$0 start
;;
status)
# 检查服务状态的命令
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
5.4 启动脚本应具备的功能
- 启动服务,通常用
nohup或后台启动命令,重定向日志。 - 停止服务,通常用
kill或pkill关闭进程。 - 重启服务,先停止再启动。
- 状态检查,查看服务是否运行(可选)。
6. 脚本权限和注册
- 脚本必须可执行:
chmod +x /etc/init.d/your_service
- 注册到运行级别启动(Debian/Ubuntu 系统):
update-rc.d your_service defaults
- 在 CentOS/RHEL 上:
chkconfig --add your_service
这会自动创建 /etc/rcX.d/ 目录下的 S* 和 K* 软链接。
7. 例子:典型 SysVinit 脚本(简化版)
#!/bin/sh
# /etc/init.d/myapp
case "$1" in
start)
echo "Starting myapp..."
cd /opt/myapp
nohup ./myapp_binary > /var/log/myapp.log 2>&1 &
;;
stop)
echo "Stopping myapp..."
pkill -f myapp_binary
;;
restart)
$0 stop
sleep 1
$0 start
;;
status)
pgrep -f myapp_binary >/dev/null && echo "myapp is running" || echo "myapp is stopped"
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
8. 现代系统为什么多用 systemd?
- systemd 提供更强的依赖管理、并行启动、状态监控和日志管理。
- 但裁剪版、嵌入式系统仍多用 SysVinit,因其简单、体积小。
9. 总结
| 方面 | 说明 |
|---|---|
| 位置 | /etc/init.d/ |
| 启动脚本格式 | 接收 start、stop、restart、status 参数 |
| 运行级别管理 | /etc/rcX.d/ 下通过 SNNname 和 KNNname 软链接控制启动和停止顺序 |
| 启动机制 | /etc/inittab 通过运行级别调用对应脚本 |
| 脚本功能 | 启动服务进程、停止服务进程、支持重启和状态查看 |

浙公网安备 33010602011771号