- Home
- Packages
- Forums
- Wiki
- Bugs
- AUR
- Download

# Initscripts/Writing rc.d scripts (简体中文)

From ArchWiki

摘要
书写 rc.d 守护进程脚本
相关页面
Arch Boot Process (简体中文)
Daemon (简体中文)
rc.conf (简体中文)

翻译状态： 本文是英文页面 Initscripts/Writing_rc.d_scripts 的翻译，最后翻译时间：2012-10-28，点击这里可以查看翻译后英文页面的改动。

Initscripts使用 rc.d 脚本控制守护进程的启动、停止和重启。

## 指南

- source `/etc/rc.conf`、`/etc/rc.d/functions`以及可选的`/etc/conf.d/DAEMON_NAME`。
- 参数和其他守护进程选项应该放到 `/etc/conf.d/DAEMON_NAME`。这样可以将配置文件和逻辑分开，保证守护进程脚本的一致性。
- 使用 `/etc/rc.d/functions`中的函数，避免重新造轮子。
- 至少要包含 start, stop 以及 restart 作为参数。

## 可用函数

以下是 `/etc/rc.d/functions`包含的函数：

- stat_busy "<message>": 将打印信息的状态设置为busy(例如 Starting daemon [BUSY])
- stat_done: 状态设置为 done (例如 Starting daemon [DONE])
- stat_fail: 状态设置为 failed (例如 Starting daemon [FAILED])
- get_pid <program>: 获取程序的 PID
- ck_pidfile <PID-file> <program>: 检查 PID-file 是否还是程序的可用文件(例如 ck_pidfile /var/run/daemon.pid daemon || rm -f /var/run/daemon.pid)
- [add|rm]_daemon <program>: 添加/删除程序到运行的守护进程(保存在`/run/daemons/`)

## 举例

以下是 crond的例子，更多示例请查看 `/etc/rc.d`。

配置文件：

    /etc/conf.d/crond

    ARGS="-S -l info"

实际脚本：

    /etc/rc.d/crond

    #!/bin/bash

    . /etc/rc.conf
    . /etc/rc.d/functions

    DAEMON=crond
    ARGS=

    [ -r /etc/conf.d/$DAEMON ] && . /etc/conf.d/$DAEMON

    PID=$(get_pid $DAEMON)

    case "$1" in
     start)
       stat_busy "Starting $DAEMON"
       [ -z "$PID" ] && $DAEMON $ARGS &>/dev/null
       if [ $? = 0 ]; then
         add_daemon $DAEMON
         stat_done
       else
         stat_fail
         exit 1
       fi
       ;;
     stop)
       stat_busy "Stopping $DAEMON"
       [ -n "$PID" ] && kill $PID &>/dev/null
       if [ $? = 0 ]; then
         rm_daemon $DAEMON
         stat_done
       else
         stat_fail
         exit 1
       fi
       ;;
     restart)
       $0 stop
       sleep 1
       $0 start
       ;;
     *)
       echo "usage: $0 {start|stop|restart}"
    esac

Retrieved from "https://wiki.archlinux.org/index.php?title=Initscripts/Writing_rc.d_scripts_(简体中文)&oldid=232100"
Categories:

- Boot process (简体中文)
- Package development (简体中文)

## Navigation menu