从我在Linux上的测试看来,似乎是
service sshd reload
sshd
已在运行时才有效sshd
文件有问题sshd_config
service sshd restart
sshd
是否已在运行sshd
文件包含无效语法或其他问题,则停止sshd_config
sshd_config
文件有问题,则返回非零错误代码我知道他们正在执行不同的操作,但在我看来,我应该总是使用service sshd restart
。在某些情况下,service sshd reload
更可取的原因是否有任何理由?
答案 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连接的情况下验证新配置(例如,在修改权限时,确保您仍然可以登录)。
答案 2 :(得分:0)
仅提及:如上例所示,人们使用的是sshd,它是守护进程,服务是ssh。正确的行应该是:
service ssh reload
答案 3 :(得分:-1)
我认为这个“reload”可以在shell脚本中用于多服务恢复到初始状态,在这种情况下我们不知道服务是否正在运行,所以我们只是让所有这些服务“重新加载” ”
如果我们在这种情况下使用“重启”,那么我们未使用的部分服务将启动。
通常,为了调试单个服务上的问题(或修改),我们希望像“sshd”这样的服务启动,“restart”应该更好,因为我们不需要检查这个服务是否成功运行。