linux - 为什么我会优先使用 "service sshd reload"而不是 "service sshd restart"?

标签 linux ssh operating-system sshd

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

服务 sshd 重新加载

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

服务 sshd 重启

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

我知道他们正在执行不同的操作,但在我看来,我应该始终使用 service sshd restart 是很简单的事情。为什么 service sshd reload 在某些情况下更可取?

最佳答案

当您运行 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 命令在两种情况下(重新启动/重新加载)做几乎相同的事情:

重新加载:尝试终止发送 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
    }

    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
    }

关于linux - 为什么我会优先使用 "service sshd reload"而不是 "service sshd restart"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17591458/

相关文章:

memory-management - 哪些操作系统将释放内存泄漏?

node.js - 使用 Node.js 跟踪在操作系统上打开的每个应用程序

python - 如何使用 python 变量运行多个 Linux 命令

c - 如何为 mmap() 禁用写时复制和按需填零

node.js - 使用 Node.js 应用程序配置 nginx 时出现问题

ssh - sftp 的 Cygwin 用户权限(不允许操作)

ssh - 断开SSH连接后,如何防止gnu screen 无响应?

c - 如何创建由 256 字节组成的大小为 2^16 block 的数组

linux - bash 执行整个脚本,但如果任何中间作业失败则返回退出代码 > 0

python - 使用 PuTTY 或 plink 通过 python 子进程连接到远程 linux 机器会抛出错误