Difference between revisions of "Initscripts/Writing rc.d scripts"
(consistency; merge section) |
(add warning template about initscripts being obsolete and superseded by systemd) |
||
(20 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
− | [[Category:Boot process | + | [[Category:Boot process]] |
− | [[Category: | + | [[Category:Package development]] |
+ | [[cs:Writing rc.d scripts]] | ||
+ | [[es:Writing rc.d scripts]] | ||
+ | [[zh-CN:Writing rc.d scripts]] | ||
{{Article summary start}} | {{Article summary start}} | ||
− | {{Article summary text|Writing rc.d | + | {{Article summary text|Writing rc.d daemon scripts.}} |
{{Article summary heading|Related}} | {{Article summary heading|Related}} | ||
{{Article summary wiki|Arch Boot Process}} | {{Article summary wiki|Arch Boot Process}} | ||
Line 9: | Line 12: | ||
{{Article summary end}} | {{Article summary end}} | ||
− | + | {{Warning|Arch only supports [[systemd]]. Arch's old initscripts package is obsolete and is no longer supported. All Arch users need to move to systemd.}} | |
− | + | [[Initscripts]] uses rc.d scripts to used to control the starting, stopping and restarting of [[Daemon|daemons]]. | |
− | |||
− | |||
− | |||
− | |||
− | == | + | == Guideline == |
− | + | * Source {{ic|/etc/rc.conf}}, {{ic|/etc/rc.d/functions}}, and optionally {{ic|/etc/conf.d/DAEMON_NAME}}. | |
− | + | * Arguments and other daemon options should be placed in {{ic|/etc/conf.d/DAEMON_NAME}}. This is done to separate configuration from logic and to keep a consistent style among daemon scripts. | |
− | + | * Use functions in {{ic|/etc/rc.d/functions}} instead of duplicating their functionality. | |
− | . /etc/rc.conf | + | * Include at least start, stop and restart as arguments to the script. |
− | . /etc/rc.d/functions | ||
− | |||
− | |||
− | |||
− | + | == Available functions == | |
+ | * There are some functions provided by {{ic|/etc/rc.d/functions}}: | ||
+ | ** {{Ic|stat_busy "''message''"}}: set status ''busy'' for printed message (e.g. <nowiki>Starting daemon [BUSY]</nowiki>) | ||
+ | ** {{Ic|stat_done}}: set status ''done'' (e.g. <nowiki>Starting daemon [DONE]</nowiki>) | ||
+ | ** {{Ic|stat_fail}}: set status ''failed'' (e.g. <nowiki>Starting daemon [FAILED]</nowiki>) | ||
+ | ** {{Ic|get_pid ''program''}}: get PID of the program | ||
+ | ** {{Ic|ck_pidfile ''PID-file'' ''program''}}: check whether PID-file is still valid for the program (e.g. <nowiki>ck_pidfile /var/run/daemon.pid daemon || rm -f /var/run/daemon.pid</nowiki>) | ||
+ | ** {{Ic|<nowiki>[add|rm]_daemon</nowiki> ''program''}}: add/remove program to running daemons (stored in {{ic|/run/daemons/}}) | ||
− | + | Full list of functions is much longer and most possibilities (like way to control whether or not non-root users can launch daemon) are still undocumented and can be learned only from {{ic|/etc/rc.d/functions}} source. See also {{Ic|man rc.d}}. | |
− | + | == Example == | |
− | + | The following is an example for ''crond''. Look in {{ic|/etc/rc.d}} for greater variety. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==Example== | ||
− | The following is an example for '' | ||
The configuration file: | The configuration file: | ||
− | {{ | + | {{hc|/etc/conf.d/crond|2=<nowiki>ARGS="-S -l info"</nowiki>}} |
The actual script: | The actual script: | ||
− | {{ | + | {{hc|/etc/rc.d/crond|2=<nowiki> |
#!/bin/bash | #!/bin/bash | ||
+ | |||
. /etc/rc.conf | . /etc/rc.conf | ||
. /etc/rc.d/functions | . /etc/rc.d/functions | ||
− | DAEMON= | + | DAEMON=crond |
ARGS= | ARGS= | ||
+ | |||
[ -r /etc/conf.d/$DAEMON ] && . /etc/conf.d/$DAEMON | [ -r /etc/conf.d/$DAEMON ] && . /etc/conf.d/$DAEMON | ||
− | PID=$( | + | PID=$(get_pid $DAEMON) |
case "$1" in | case "$1" in | ||
start) | start) | ||
stat_busy "Starting $DAEMON" | stat_busy "Starting $DAEMON" | ||
− | [ -z "$PID" ] && | + | [ -z "$PID" ] && $DAEMON $ARGS &>/dev/null |
if [ $? = 0 ]; then | if [ $? = 0 ]; then | ||
add_daemon $DAEMON | add_daemon $DAEMON | ||
Line 95: | Line 62: | ||
else | else | ||
stat_fail | stat_fail | ||
+ | exit 1 | ||
fi | fi | ||
;; | ;; | ||
Line 105: | Line 73: | ||
else | else | ||
stat_fail | stat_fail | ||
+ | exit 1 | ||
fi | fi | ||
;; | ;; |
Revision as of 00:42, 18 June 2013
zh-CN:Writing rc.d scripts Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end
Warning: Arch only supports systemd. Arch's old initscripts package is obsolete and is no longer supported. All Arch users need to move to systemd.
Initscripts uses rc.d scripts to used to control the starting, stopping and restarting of daemons.
Guideline
- Source
/etc/rc.conf
,/etc/rc.d/functions
, and optionally/etc/conf.d/DAEMON_NAME
. - Arguments and other daemon options should be placed in
/etc/conf.d/DAEMON_NAME
. This is done to separate configuration from logic and to keep a consistent style among daemon scripts. - Use functions in
/etc/rc.d/functions
instead of duplicating their functionality. - Include at least start, stop and restart as arguments to the script.
Available functions
- There are some functions provided by
/etc/rc.d/functions
:-
stat_busy "message"
: set status busy for printed message (e.g. Starting daemon [BUSY]) -
stat_done
: set status done (e.g. Starting daemon [DONE]) -
stat_fail
: set status failed (e.g. Starting daemon [FAILED]) -
get_pid program
: get PID of the program -
ck_pidfile PID-file program
: check whether PID-file is still valid for the program (e.g. ck_pidfile /var/run/daemon.pid daemon || rm -f /var/run/daemon.pid) -
[add|rm]_daemon program
: add/remove program to running daemons (stored in/run/daemons/
)
-
Full list of functions is much longer and most possibilities (like way to control whether or not non-root users can launch daemon) are still undocumented and can be learned only from /etc/rc.d/functions
source. See also man rc.d
.
Example
The following is an example for crond. Look in /etc/rc.d
for greater variety.
The configuration file:
/etc/conf.d/crond
ARGS="-S -l info"
The actual script:
/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