rc.d se contente de lancer les daemons dans un ordre précis, défini par le nom du fichier.
Ce qui veut dire (si je ne me trompe pas):
pas de gestion des dépendances (par example, sur ma Debian, ssh ne vérifie pas que le réseau est accessible);
démarrage des daemon en série, ce qui freine le démarrage du système (debian à bien un paquet starpar, mais il a beau être installé, si jamais je n'ai pas de DHCP le boot mets 3 plombes juste à cause de ça...);
si un daemon tombe, il n'est pas relancé automatiquement;
c'est une question de goût, mais, sérieux, 108 lignes de bourne shell pour gérer mpd (c'est un example, et je n'inclue pas les fichiers inclus)?
double fork: les process doivent s'échapper sinon le démarrage est bloqué...
La plupart des distros ont opté pour systemd, personnellement je préfère runit (malgré que gérer les inter-dépendances soit pénible, il faut que je teste nosh pour ça).
Pour info, avec rc.d, le script Debian pour lancer isc-dhcp-server (non, ce n'est pas le pire, juste 1 au hasard):
#!/bin/sh### BEGIN INIT INFO# Provides: isc-dhcp-server# Required-Start: $remote_fs $network $syslog# Required-Stop: $remote_fs $network $syslog# Should-Start: $local_fs slapd $named# Should-Stop: $local_fs slapd# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: DHCP server# Description: Dynamic Host Configuration Protocol Server### END INIT INFOPATH=/sbin:/bin:/usr/sbin:/usr/bin
test -f /usr/sbin/dhcpd ||exit0DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp-server}"# It is not safe to start if we don't have a default configuration...if[ ! -f "$DHCPD_DEFAULT"];thenecho"$DHCPD_DEFAULT does not exist! - Aborting..."if["$DHCPD_DEFAULT"="/etc/default/isc-dhcp-server"];thenecho"Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem."fiexit0fi
. /lib/lsb/init-functions
# Read init script configuration[ -f "$DHCPD_DEFAULT"]&& . "$DHCPD_DEFAULT"NAME4=dhcpd
NAME6=dhcpd6
DESC4="ISC DHCPv4 server"DESC6="ISC DHCPv6 server"# use already specified config file or fallback to defaultsDHCPDv4_CONF=${DHCPDv4_CONF:-/etc/dhcp/dhcpd.conf}DHCPDv6_CONF=${DHCPDv6_CONF:-/etc/dhcp/dhcpd6.conf}# try to read pid file name from config file or fallback to defaultsif[ -z "$DHCPDv4_PID"];thenDHCPDv4_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"\(.*\)"[ \t]*;.*$/1円/p' < "$DHCPDv4_CONF"2>/dev/null | head -n 1)fiif[ -z "$DHCPDv6_PID"];thenDHCPDv6_PID=$(sed -n -e 's/^[ \t]*dhcpv6-pid-file-name[ \t]*"\(.*\)"[ \t]*;.*$/1円/p' < "$DHCPDv6_CONF"2>/dev/null | head -n 1)fiDHCPDv4_PID="${DHCPDv4_PID:-/var/run/dhcpd.pid}"DHCPDv6_PID="${DHCPDv6_PID:-/var/run/dhcpd6.pid}"
test_config(){VERSION="1ドル"CONF="2ドル"if ! /usr/sbin/dhcpd -t $VERSION -q -cf "$CONF" > /dev/null 2>&1;thenecho"dhcpd self-test failed. Please fix $CONF."echo"The error was: "
/usr/sbin/dhcpd -t $VERSION -cf "$CONF"exit1fi}
check_status(){OPTION="1ドル"PIDFILE="2ドル"NAME="3ドル"if[ ! -r "$PIDFILE"];thentest"$OPTION" != -v ||echo"$NAME is not running."return3fiifread pid < "$PIDFILE"&& ps -p "$pid" > /dev/null 2>&1;thentest"$OPTION" != -v ||echo"$NAME is running."return0elsetest"$OPTION" != -v ||echo"$NAME is not running but $PIDFILE exists."return1fi}
start_daemon(){VERSION="1ドル"CONF="2ドル"NAME="3ドル"PIDFILE="4ドル"DESC="5ドル"shift5INTERFACES="$*"
test_config "$VERSION""$CONF"
log_daemon_msg "Starting $DESC""$NAME"if[ -e "$PIDFILE"];then
log_failure_msg "dhcpd service already running (pid file $PIDFILE currenty exists)"exit1fi
touch /var/lib/dhcp/$NAME.leases
start-stop-daemon --start --quiet --pidfile $PIDFILE\
--exec /usr/sbin/dhcpd -- $VERSION -q -cf $CONF$INTERFACES
sleep 2if check_status -q $PIDFILE$NAME;then
log_end_msg 0else
log_failure_msg "check syslog for diagnostics."
log_end_msg 1exit1fi}
stop_daemon(){if check_status -q $DHCPDv4_PID$NAME4;then
log_daemon_msg "Stopping $DESC4""$NAME4"
start-stop-daemon --stop --quiet --pidfile $DHCPDv4_PID
log_end_msg $?
rm -f "$DHCPDv4_PID"fiif check_status -q $DHCPDv6_PID$NAME6;then
log_daemon_msg "Stopping $DESC6""$NAME6"
start-stop-daemon --stop --quiet --pidfile $DHCPDv6_PID
log_end_msg $?
rm -f "$DHCPDv6_PID"fi}case"1ドル" in
start)iftest -n "$INTERFACES" -a -z "$INTERFACESv4";thenecho"DHCPv4 interfaces are no longer set by the INTERFACES variable in" >&2echo"/etc/default/isc-dhcp-server. Please use INTERFACESv4 instead." >&2echo"Migrating automatically for now, but this will go away in the future." >&2INTERFACESv4="$INTERFACES"fiiftest -n "$INTERFACESv4";thenecho"Launching IPv4 server only."
start_daemon "-4""$DHCPDv4_CONF""$NAME4"\"$DHCPDv4_PID""$DESC4""$INTERFACESv4"fiiftest -n "$INTERFACESv6";thenecho"Launching IPv6 server only."
start_daemon "-6""$DHCPDv6_CONF""$NAME6"\"$DHCPDv6_PID""$DESC6""$INTERFACESv6"fiiftest -z "$INTERFACESv4" -a -z "$INTERFACESv6";thenecho"Launching both IPv4 and IPv6 servers (please configure INTERFACES in /etc/default/isc-dhcp-server if you only want one or the other)."
start_daemon "-4""$DHCPDv4_CONF""$NAME4"\"$DHCPDv4_PID""$DESC4"""
start_daemon "-6""$DHCPDv6_CONF""$NAME6"\"$DHCPDv6_PID""$DESC6"""fi;;
stop)
stop_daemon
;;
restart | force-reload)0ドル stop
sleep 20ドル start
if["$?" !="0"];thenexit1fi;;
status)iftest -n "$INTERFACES" -a -z "$INTERFACESv4";thenINTERFACESv4="$INTERFACES"fiiftest -n "$INTERFACESv4";thenecho -n "Status of $DESC4: "
check_status -v $DHCPDv4_PID$NAME4||exit$?fiiftest -n "$INTERFACESv6";thenecho -n "Status of $DESC6: "
check_status -v $DHCPDv6_PID$NAME6||exit$?fi;;
*)echo"Usage: 0ドル {start|stop|restart|force-reload|status}"exit1esacexit0
[^] # Re: Devuan
Posté par freem . En réponse au journal Remède au problème démarrage devuan ascii sur raspberry pi 2. Évalué à 8.
rc.d se contente de lancer les daemons dans un ordre précis, défini par le nom du fichier.
Ce qui veut dire (si je ne me trompe pas):
La plupart des distros ont opté pour systemd, personnellement je préfère runit (malgré que gérer les inter-dépendances soit pénible, il faut que je teste nosh pour ça).
Pour info, avec rc.d, le script Debian pour lancer isc-dhcp-server (non, ce n'est pas le pire, juste 1 au hasard):
Le fichier run de voidlinux pour dhcpd: