!/bin/sh

XMSDN
是Shell脚本的第一行,即Shebang声明,它位于文件开头,明确指定了该脚本需要使用/bin/sh解释器来执行,用于在Unix/Linux系统中告诉操作系统调用相应的Shell程序来运行后续的指令代码。

Debian中/etc/init.d目录下Shell脚本的编写规范与实战

在传统的 Linux 系统管理中,/etc/init.d 目录下的脚本扮演着至关重要的角色,这些脚本通常被称为 SysVinit 脚本,它们定义了如何启动、停止、重启以及查询系统服务的状态。

虽然现代的 Debian(以及 Ubuntu)系统已经全面转向 Systemd,但 init.d 脚本依然被广泛支持,且在维护旧系统或编写特定兼容性脚本时非常有用,本文将详细介绍如何在 Debian 系统中编写一个规范、健壮的 /etc/init.d 脚本。

!/bin/sh

脚本的基本结构

一个标准的 init.d 脚本通常包含以下几个核心部分:Shebang环境变量函数定义Case 语句(控制逻辑) 以及 退出代码

必备的头部信息

脚本的第一行必须是 Shebang,指定解释器,虽然大多数 init 脚本使用 /bin/sh,但为了兼容性,有时也使用 /bin/bash

bash

核心函数定义

init.d 脚本主要依靠函数来执行具体的操作,你需要至少定义以下四个函数:

  • start(): 启动服务的逻辑。
  • stop(): 停止服务的逻辑,通常需要处理进程的退出信号。
  • restart(): 重启服务(先停止再启动)。
  • status(): 检查服务是否正在运行。

Case 语句:脚本的“大脑”

这是 init.d 脚本最关键的部分,脚本通过 $1 变量接收用户输入的命令(如 start, stop, restart),然后通过 case 语句分发到对应的函数。

完整示例代码

下面是一个名为 myservice 的完整脚本示例,你可以将其复制到 /etc/init.d/myservice 文件中。

### BEGIN INIT INFO
# Provides:          myservice
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example init script for Debian
# Description:       This is a sample script to demonstrate how to write init.d scripts.
### END INIT INFO
# 获取脚本名称
NAME="myservice"
DAEMON="/usr/local/bin/myservice" # 替换为你的实际程序路径
PIDFILE="/var/run/${NAME}.pid"
LOGFILE="/var/log/${NAME}.log"
# 检查程序是否存在
test -x $DAEMON || exit 0
# 确保目录存在
mkdir -p /var/run
mkdir -p /var/log
# 启动函数
start() {
    echo "Starting $NAME..."
    # 使用 nohup 在后台运行,并将输出重定向到日志文件
    # $! 保存当前进程的 PID
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- >> $LOGFILE 2>&1 &
    echo $! > $PIDFILE
}
# 停止函数
stop() {
    echo "Stopping $NAME..."
    # 优雅地停止进程
    if [ -f "$PIDFILE" ]; then
        PID=$(cat $PIDFILE)
        kill -TERM $PID 2>/dev/null
        rm -f $PIDFILE
    else
        echo "$NAME is not running."
    fi
💡 温馨提示

📌 阅读须知 Rules & Notice

本站坚持免费分享,致力于为大家提供实用、优质的内容与资源。

🔗欢迎大家收藏与转发,转载请保留本站链接,请勿私自去除版权信息。

📚所有外部整理资源,仅作学习交流使用,请勿用于各类商业用途。

🤝网络相聚本是缘分,希望大家文明交流,理性浏览。

🛠️若发现内容有误或涉及侵权,我们将第一时间处理整改。

💖 感谢每一位朋友的陪伴与支持

✨ 用心分享,一路同行 ✨

目录[+]