web-dev-qa-db-ja.com

「servicesshdrestart」よりも「servicesshdriload」を使用するのはなぜですか。

Linuxでの私のテストから、それは

service sshd reload

  • sshdがすでに実行されている場合にのみ機能します
  • sshd_configファイルに問題がある場合はsshdを停止します
  • Sshd_configファイルに問題がある場合でも、エラーコード0を返します

service sshd restart

  • sshdがすでに実行されているかどうかに関係なく機能します
  • sshd_configファイルに無効な構文またはその他の問題がある場合、sshdを停止します
  • sshd_configファイルに問題がある場合、ゼロ以外のエラーコードを返します

それらが異なる操作を実行していることは理解していますが、常にservice sshd restartを使用する必要があることは簡単に思えます。状況によってはservice sshd reloadが望ましい理由はありますか?

8
Tim Bellis

service sshdコマンドを実行すると、optをリロード/再起動でき、実際には次のように環境が変更されたプログラムが実行されます。

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

例えば。:

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

Sshdコマンドは、どちらの場合もほぼ同じことを行います(再起動/再読み込み)。

reload:HUP信号を送信しているプロセスを強制終了しようとします。スニペットでわかるように、それを行うにはプロセスのPIDが必要です。 (sshdがすでに実行されているかどうかに関係なく機能します)

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

restart:stop-> startを実行する場合と同じように動作します。

    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
    }
3
nay743

複数のWebサーバーを含む一部のアプリは、再起動せずに構成の再読み込みをサポートしています。この場合、reloadは、そうするように通知するための最良の方法です。

ユースケースとして、sshdが実際にdidで、既存の接続に影響を与えることなく構成の再読み込みをサポートしていると便利です。これにより、現在のssh接続を失うことなく新しい構成を確認できます(たとえば、アクセス許可を変更するときに、引き続きログインできるようにします)。

さらに読む: すべてのsystemdユニットアクションのリスト

1
jpaugh

言及するだけです:上記の例のように、人々はsshdを使用します、それはデーモンであり、サービスはsshです。正しい行は次のようになります。

service ssh reload
0
Borja Tarraso