为什么我会使用“service sshd reload”优先于“service sshd restart”?

时间:2013-07-11 10:52:30

标签: linux ssh operating-system sshd

从我在Linux上的测试看来,似乎是

service sshd reload

  • 仅在sshd已在运行时才有效
  • 如果sshd文件有问题
  • ,则停止sshd_config
  • 即使sshd_config文件有问题,也会返回错误代码0

service sshd restart

  • 无论sshd是否已在运行
  • ,均可正常运行
  • 如果sshd文件包含无效语法或其他问题,则停止sshd_config
  • 如果sshd_config文件有问题,则返回非零错误代码

我知道他们正在执行不同的操作,但在我看来,我应该总是使用service sshd restart。在某些情况下,service sshd reload更可取的原因是否有任何理由?

4 个答案:

答案 0 :(得分:3)

当您运行 service sshd 命令时, opt 可以重新加载/重新启动它实际上运行一个带有修改过的环境的程序,如下所示:

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

e.g:

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

sshd命令在两种情况下(重启/重新加载)几乎完全相同:

重新加载:尝试终止发送HUP信号的进程,正如您在snipet上看到的那样,它需要进程的PID才能执行此操作。 (无论sshd是否已经运行,都可以工作)

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

重新启动:它就像执行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
    }

答案 1 :(得分:1)

某些应用程序(包括多个Web服务器)支持重新加载其配置而无需重新启动。在这种情况下,reload将是发出信号的最佳方式。

作为一个用例,如果sshd实际 支持重新加载配置而不影响现有连接,那将会很棒。这样就可以在不丢失当前ssh连接的情况下验证新配置(例如,在修改权限时,确保您仍然可以登录)。

进一步阅读:List of all systemd unit actions

答案 2 :(得分:0)

仅提及:如上例所示,人们使用的是sshd,它是守护进程,服务是ssh。正确的行应该是:

service ssh reload

答案 3 :(得分:-1)

我认为这个“reload”可以在shell脚本中用于多服务恢复到初始状态,在这种情况下我们不知道服务是否正在运行,所以我们只是让所有这些服务“重新加载” ”

如果我们在这种情况下使用“重启”,那么我们未使用的部分服务将启动。

通常,为了调试单个服务上的问题(或修改),我们希望像“sshd”这样的服务启动,“restart”应该更好,因为我们不需要检查这个服务是否成功运行。