在RockyLinux等基于RHEL的系统中,虽然现代版本默认使用systemd作为初始化系统,但为了兼容旧有应用或特定需求,我们有时仍需编写传统的init.d脚本来管理服务。本文将手把手教你如何编写一个标准、可用的RockyLinux init.d脚本,即使你是Linux小白也能轻松上手。
什么是init.d脚本?
init.d脚本是位于
/etc/init.d/目录下的Shell脚本,用于控制服务的启动、停止、重启和状态查询。它们通常由SysV init系统调用,在RockyLinux 8/9中虽已过渡到systemd,但仍可通过兼容层支持init.d脚本。
编写RockyLinux init.d脚本的基本结构
一个合格的init.d脚本应包含以下要素:
标准的头部注释(含chkconfig信息) 支持start、stop、restart、status等参数 使用/etc/init.d/functions提供的函数增强可读性 正确返回退出状态码
实战:编写一个简单的Web服务init.d脚本
假设我们要为一个名为
myweb的Python Web应用创建服务脚本。该应用通过命令
/usr/bin/python3 /opt/myweb/app.py启动。
步骤1:创建脚本文件
以root身份创建脚本文件:
sudo nano /etc/init.d/myweb
步骤2:编写脚本内容
将以下内容粘贴到文件中:
#!/bin/bash## myweb Startup script for the MyWeb application## chkconfig: 2345 80 20# description: MyWeb is a simple Python web server.# processname: myweb# config: /etc/myweb/config.conf# pidfile: /var/run/myweb.pid# Source function library.. /etc/init.d/functions# Define variablesAPP_NAME="myweb"APP_PATH="/opt/myweb/app.py"PYTHON_CMD="/usr/bin/python3"PID_FILE="/var/run/myweb.pid"LOCK_FILE="/var/lock/subsys/myweb"start() { echo -n $"Starting $APP_NAME: " if [ -f $PID_FILE ]; then echo_failure echo exit 1 fi daemon --pidfile=$PID_FILE $PYTHON_CMD $APP_PATH & RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $LOCK_FILE return $RETVAL}stop() { echo -n $"Shutting down $APP_NAME: " killproc -p $PID_FILE RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $LOCK_FILE $PID_FILE return $RETVAL}restart() { stop start}status() { status -p $PID_FILE $APP_NAME}case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1esacexit $? 步骤3:设置权限并注册服务
保存后,赋予执行权限:
sudo chmod +x /etc/init.d/myweb
使用chkconfig注册服务(确保已安装
initscripts包):
sudo chkconfig --add mywebsudo chkconfig myweb on
步骤4:测试服务
现在你可以像操作传统服务一样使用它:
sudo service myweb startsudo service myweb statussudo service myweb stop
关键要点解析
chkconfig行:定义服务在哪些运行级别启动(2345),以及启动/停止优先级(80/20) functions库:提供daemon、
killproc、
status等标准化函数 PID与LOCK文件:用于跟踪进程状态,避免重复启动 退出状态码:必须正确返回0(成功)或非0(失败),否则服务管理会出错
注意事项
虽然init.d脚本在RockyLinux中仍可使用,但官方推荐使用systemd unit文件 通过本教程,你已经掌握了RockyLinux init.d脚本的编写方法、Linux服务管理的基础知识、系统启动脚本的结构规范,以及如何完成完整的RockyLinux服务配置流程。现在,你可以为自己的应用创建可靠的服务脚本了!
