지정된 시간 이후에 서버를 다시 시작하려고 합니다.
서버에 로그인하는 경우 다음 명령을 사용하여 이를 달성할 수 있습니다.
sleep 10 && reboot
쉘이 종료되더라도 이 명령을 (tmux 또는 screen 없이) 유지하기 위해 다양한 옵션을 시도했지만 가장 적합했습니다 setsid
.& disown
setsid bash -c 'sleep 10 && reboot' &
... 또는:
bash -c 'sleep 10 && reboot' & disown
지금까지는 이 명령이 호출되는 셸을 닫아도 서버에서 제대로 작동합니다. 하지만 서버를 다시 시작하고 싶기 때문에SSH명령을 호출한 후 즉시 종료합니다(지정된 sleep
시간 동안 기다리지 않고). 위에서 설명한 명령을 사용하면 다음과 같이 이 작업을 수행할 수 있을 것 같습니다.
ssh user@server -t "setsid bash -c 'sleep 10 && reboot' &"
... 또는:
ssh user@server -t "bash -c 'sleep 10 && reboot' & disown"
그러나 흥미로운 점은 이러한 명령이 해당 이름으로 프로세스를 시작하고 지정된 시간이 (sd-pam)
지나면 아무런 작업도 수행하지 않고 종료된다는 것입니다 . sleep
그러나 이 명령을 정기적으로 실행하면 약 10% 정도 작동한다는 것을 알 수 있습니다. 이 동작을 조사한 결과 (sd-pam)
프로세스가 여러 가지 방식으로 제한되어 있음을 발견했습니다(예: 파일을 읽고 쓸 수 없으므로 다시 시작 명령에서 오류가 발생하면 아무것도 기록할 수 없습니다).
모든 명령은 root
Fedora 32의 사용자가 실행합니다.
편집하다:
@UlrichSchwarz에게 감사드립니다.이 트릭:
echo 'sleep 30; reboot' | at now
이는 다음에도 적용됩니다 ssh
.
ssh user@server -t "echo 'sleep 30; reboot' | at now"
하는 것과 어떻게 at
다른 가요?setsid
& disown
답변1
shutdown 명령은 필요한 경우 나중에 활동을 예약할 수 있는 기능을 통해 원하는 작업을 수행할 것이라고 생각합니다. 예를 들어, 다시 시작하려면 "-r" 스위치를 사용하고 1분 동안 지연하려면 "+1" 스위치를 사용합니다. 그러나 종료하려면 sudo를 사용한 권한 상승이 필요합니다.
sudo shutdown -r '+1'
"+1" 대신 "now"를 사용하여 즉시 다시 시작할 수도 있습니다.
sudo shutdown -r now