2013-07-11 4 views
8

Из моих тестов на Linux, похоже,Почему я должен использовать «сервис sshd reload» вместо «service sshd restart»?

service sshd reload

  • работает только когда sshd уже работает
  • Остановки sshd если файл sshd_config имеет проблемы
  • Возвращает код ошибки 0, даже если Файл sshd_config имеет проблемы

service sshd restart

  • работает независимо от того, sshd уже работает
  • Остановки sshd если файл sshd_config имеет недопустимый синтаксис или другие проблемы
  • Возвращает код ненулевой ошибки, если файл sshd_config имеет проблемы

Я понимаю, что они выполняют разные операции, но мне кажется, что я всегда должен использовать service sshd restart. Есть ли причины, почему service sshd reload предпочтительнее в некоторых ситуациях?

ответ

3

При запуске службы Sshd команду, где неавтоматического можно перезагрузить/перезапустить его, на самом деле запускает программу с измененной среде так же, как это:

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 
    } 

    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

Это полезная информация, но почему бы я когда-либо использовать перезагружать? Также вы сказали, что перезагрузка работает независимо от того, запущен ли sshd, но он не может отправить сигнал в sshd, если sshd не запущен. –

0

Просто говоря: как в приведенных выше примерах люди используют SSHd, что это демон, сервис SSH. Правильная линия должна быть:

service ssh reload 
+2

Это полностью зависит от используемого вами дистрибутива. – miken32

-1

Я думаю, что это «перезагрузка» может быть использован в сценарии оболочки для мульти услуг для восстановления в исходное состояние, в данном случае мы не знаем, если служба запущена или нет , поэтому мы просто позволяем всем этим сервисам «перезагружать».

Если мы воспользуемся «перезагрузкой», в этом случае некоторые из тех сервисов, которые мы не использовали, начнутся.

Обычно для устранения неполадок (или модификации) на одной услуге мы хотим, чтобы эта служба, например, «sshd», запускалась, «перезагрузка» должна быть лучше, поскольку нам не нужно проверять, успешно ли эта служба работает.

+0

Этот ответ на самом деле не имеет смысла. Речь идет о sshd, а не о случайных сервисах, которые диктуют ваше воображение. – alzee

+0

Этот вопрос кажется о «sshd», но на самом деле он спрашивает о различии между «перезагрузкой» и «перезагрузкой», а не разницей между «sshd» и «ssh», так что каков правильный ответ на этот вопрос? – Jevin

+0

Итак, это вопрос о специальном сервисе, но ответ может быть обычно использован в любых сервисах. – Jevin

1

Некоторые приложения, в том числе несколько веб-серверов, поддерживают перезагрузку их конфигурации без перезапуска вообще. В этом случае reload будет лучшим способом сигнализировать им об этом.

В качестве варианта использования было бы здорово, если бы sshd фактически сделал Поддержка перезагрузки конфигурации без ущерба для существующих соединений. Это позволит проверить новую конфигурацию без потери текущего ssh-соединения (например, при изменении разрешений, чтобы вы все равно могли войти в систему).

Дальнейшее чтение: List of all systemd unit actions

+1

Но перезагрузка ** \ _ поддерживается \ _ **. Я просто сделал это через SSH-соединение. –