2013-07-11 7 views
8

Von meinen Tests unter Linux, wie es scheint,Warum sollte ich "service sshd reload" anstelle von "service sshd restart" verwenden?

service sshd reload

  • funktioniert nur, wenn sshd bereits
  • Stops läuft sshd wenn die sshd_config Datei 0 Probleme
  • Gibt den Fehlercode hat, auch wenn die sshd_config hat Probleme

service sshd restart

  • funktioniert unabhängig davon, ob sshd bereits läuft
  • Stops sshd wenn die sshd_config Datei enthält ungültige Syntax oder andere Probleme
  • Returns Nicht-Null-Fehlercode, wenn die sshd_config Datei Probleme hat

Ich verstehe, dass sie verschiedene Operationen durchführen, aber es scheint mir ein Klacks, dass ich immer service sshd restart verwenden sollte. Gibt es Gründe, warum service sshd reload in einigen Situationen vorzuziehen ist?

Antwort

3

Wenn Sie den Dienst sshd Befehl ausführen, wo opt neu geladen werden könnte/Neustart läuft es tatsächlich ein Programm mit einer veränderten Umgebung wie folgt aus:

env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS} 

zB:

env -i PATH=/sbin:/usr/sbin:/bin:/usr/bin TERM=xterm /etc/init.d/sshd reload 

Der Befehl sshd führt in beiden Fällen (Neustart/Neuladen) fast dasselbe aus:

reload: Versucht, den Prozess zu beenden, der ein HUP-Signal sendet, und wie Sie auf dem Snipet sehen können, benötigt es die PID des Prozesses, um es zu tun. (Funktioniert unabhängig davon, ob sshd bereits läuft)

reload() 
    { 
     echo -n $"Reloading $prog: " 
     if [ -n "`pidfileofproc $SSHD`" ] ; then 
      killproc $SSHD -HUP 
     else 
      failure $"Reloading $prog" 
     fi 
     RETVAL=$? 
     echo 
    } 

Neustart: Es würde nur tun das gleiche wie wenn Sie eine Stop- auszuführen waren> starten.

restart() { 
     stop 
     start 
    } 

    start() 
    { 
     [ -x $SSHD ] || exit 5 
     [ -f /etc/ssh/sshd_config ] || exit 6 
     # Create keys if necessary 
     if [ "x${AUTOCREATE_SERVER_KEYS}" != xNO ]; then 
       do_rsa1_keygen 
       do_rsa_keygen 
       do_dsa_keygen 
     fi 

     echo -n $"Starting $prog: " 
     $SSHD $OPTIONS && success || failure 
     RETVAL=$? 
     [ $RETVAL -eq 0 ] && touch $lockfile 
     echo 
     return $RETVAL 
    } 

    stop() 
    { 
     echo -n $"Stopping $prog: " 
     if [ -n "`pidfileofproc $SSHD`" ] ; then 
      killproc $SSHD 
     else 
     failure $"Stopping $prog" 
     fi 
     RETVAL=$? 
     # if we are in halt or reboot runlevel kill all running sessions 
     # so the TCP connections are closed cleanly 
     if [ "x$runlevel" = x0 -o "x$runlevel" = x6 ] ; then 
      trap '' TERM 
      killall $prog 2>/dev/null 
      trap TERM 
     fi 
     [ $RETVAL -eq 0 ] && rm -f $lockfile 
     echo 
    } 
+0

, die nützlichen Informationen sind, aber warum sollte ich jemals nachladen benutzen? Sie haben auch gesagt, dass das erneute Laden funktioniert, unabhängig davon, ob sshd bereits läuft, aber es kann kein Signal an das sshd senden, wenn sshd nicht läuft. –

0

nur zu erwähnen: wie in den obigen Beispielen Menschen sshd verwendet werden, dass es der Dämon ist, der Service ist ssh. Das muss die richtige Linie sein:

service ssh reload 
+2

Das hängt vollständig von der Distribution ab, die Sie verwenden. – miken32

-1

Ich denke, das „Neu laden“ in einem Shell-Skript verwendet werden könnte, für Multi Services Anfangszustand, in diesem Fall erholen wir wussten nicht, ob ein Dienst läuft oder nicht , also lassen wir alle diese Dienste "neu laden".

Wenn wir in diesem Fall "Neustart" verwenden, werden einige der Dienste, die wir nicht verwendet haben, gestartet.

Normalerweise für Debugging Probleme (oder Änderung) auf einzelnen Dienst, möchten wir diesen Dienst wie "sshd" zu starten, "Neustart" sollte besser sein, denn wir müssen nicht überprüfen, ob dieser Dienst erfolgreich ausgeführt wird oder nicht.

+0

Diese Antwort macht keinen Sinn. Die Frage dreht sich um sshd, nicht zufällige Dienste, die in deiner Vorstellung wild herumlaufen. – alzee

+0

Diese Frage scheint über "sshd" zu sein, aber in der Tat fragt sie nach dem Unterschied zwischen "reload" und "restart", nicht der Unterschied zwischen "sshd" und "ssh", also, was ist die richtige Antwort für diese Frage? – Jevin

+0

Also, das ist eine Frage über einen speziellen Dienst, aber die Antwort könnte allgemein in allen Diensten verwendet werden. – Jevin

1

Einige Anwendungen, einschließlich mehrerer Webserver, unterstützen das Neuladen ihrer Konfiguration ohne Neustart. In diesem Fall wäre reload der beste Weg, ihnen dies zu signalisieren.

Als Anwendungsfall wäre es toll, wenn sshd tatsächlich tat Unterstützung Neuladen der Konfiguration ohne Auswirkungen auf bestehende Verbindungen. Das würde es ermöglichen, die neue Konfiguration zu überprüfen, ohne die aktuelle ssh-Verbindung zu verlieren (z. B. wenn Berechtigungen geändert werden, um sicherzustellen, dass Sie sich weiterhin anmelden können).

Weiterführende Literatur: List of all systemd unit actions

+1

Aber neu laden ** \ _ ist \ _ ** unterstützt. Ich habe es gerade über eine SSH-Verbindung getan. –

Verwandte Themen