활성화된 SSH 세션이 없는 경우에만 다시 시작

활성화된 SSH 세션이 없는 경우에만 다시 시작

나는 내가 겪고 있는 문제에 대한 해결책을 찾으려고 노력하고 있습니다.
SFTP를 실행하는 서버가 있습니다.
때때로 업데이트 및 기타 유지 관리를 위해 이 컴퓨터를 재부팅해야 하지만 재부팅 명령을 실행하기 위해 컴퓨터가 비활성화될 때까지 기다리고 싶지 않습니다. 서버에 다시 시작하고 마지막 SSH 연결이 활성화될 때까지 기다리도록 요청하고 싶습니다(새 연결을 거부할 수 있으면 좋지만 필수는 아닙니다). 서버에 대한 활성 연결이 실행되는 동안 다시 시작 프로세스가 일시 중지 되도록
구성할 수 있습니까 ? 이는 최소한 활성 SSH 세션이 중지될 때까지(머신을 다시 시작할 수 있는 시점) 마운트 지점, 네트워크 및 SSH 데몬을 계속 실행해야 함을 의미합니다. sshd 또는 systemd 구성을 사용하는 솔루션을 찾고 있습니다. 솔루션이 사용자 정의 스크립트라면 이를 처리하겠지만 통합 솔루션을 갖고 싶습니다.systemdsshsshd


답변1

who SSH를 통해 서버에 연결하고 다음 명령을 사용하여 로그인한 사람이 있는지 확인할 수 있습니다.w

if [[ -z $(ssh SERVERHOST-IP 'w -oh') ]]; then echo "No User Logged in"; else echo "User Connected"; fi

명령이 비어 있는지 확인하고 w -oh, 로그인한 사용자가 있는지 확인합니다.

더 이상 로그인한 사용자가 없을 때 이를 사용하여 서버를 원격으로 다시 시작할 수 있습니다.

while [ $(ssh SERVERHOST-IP 'w -oh|wc -l') -gt 0 ]; do sleep 1; echo "User Connected"; done && echo "Reboot server" && ssh -t SERVERHOST-IP 'sudo shutdown -r now'
  • echo원하는 경우 이러한 명령을 생략할 수 있습니다.
  • SERVERHOST-IP실제 서버 IP 주소 또는 호스트 이름으로 바꾸십시오 .
  • who, w아마도 wc사용할 수 있는 Linux의 일반적인 명령입니다.

다음 명령 중 하나를 사용하여 다음을 수행할 수 있습니다.

  1. 다음에 배치된 사용자 정의 종료 명령을 생성합니다./usr/sbin
  2. systemd사용자 정의 종료 루틴 만들기

관련 정보