Initscripts/Writing rc.d scripts (简体中文)
From ArchWiki
| 摘要 |
|---|
| 书写 rc.d 守护进程脚本 |
| 相关页面 |
| Arch Boot Process (简体中文) |
| Daemon (简体中文) |
| rc.conf (简体中文) |
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