Difference between revisions of "Initscripts/Writing rc.d scripts"

From ArchWiki
Jump to: navigation, search
 
(7 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[[Category:Boot process]]
+
#REDIRECT [[SysVinit#Writing rc.d scripts]]
[[Category:Package development]]
 
[[cs:Writing rc.d scripts]]
 
[[es:Writing rc.d scripts]]
 
[[zh-CN:Writing rc.d scripts]]
 
{{Article summary start}}
 
{{Article summary text|Writing rc.d daemon scripts.}}
 
{{Article summary heading|Related}}
 
{{Article summary wiki|Arch Boot Process}}
 
{{Article summary wiki|Daemon}}
 
{{Article summary wiki|rc.conf}}
 
{{Article summary end}}
 
 
 
[[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.
 
* Include at least start, stop and restart as arguments to the script.
 
 
 
== 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.
 
 
 
The configuration file:
 
{{hc|/etc/conf.d/crond|2=<nowiki>ARGS="-S -l info"</nowiki>}}
 
 
 
The actual script:
 
{{hc|/etc/rc.d/crond|2=<nowiki>
 
#!/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
 
</nowiki>}}
 

Latest revision as of 13:14, 20 February 2015