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

From ArchWiki
Jump to: navigation, search
摘要
书写 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