前陣子有台機器遇到 systemd 有問題(註:Linux systemd 取消卡住的工作),但是問題找不出來,想說要找時間重新開機解決,沒想到連重新開機都是個大問題。
- 註1:此篇環境為 Debian Linux jessie
- 註2:機器在遠端才需要使用此篇的強制重新開機的命令,不然直接手動強迫關機在開機就好
Linux 於 CLI 強制遠端重新開機
在 systemctl restart any-service 都有問題,原來連 reboot 也需要 systemd 正常運作才可以,嘗試下述命令重新開機,都無法成功:
- sudo reboot
- sudo shutdown -r now
- sudo shutdown -r -f now # sudo shutdown -r -F now 出現下述錯誤訊息
- Code should not be reached 'Unhandled option' at ../src/systemctl/systemctl.c:6316, function shutdownparseargv(). Aborting.
- 查看是 Debian jessie 不支援 -f / -F 的參數
上述情況都已經嘗試過,確實無法解決,但是機器在遠端,只好使用最暴力的方式:
- sudo su - # 先切成 root,不然下述命令寫不進去
- echo 1 > /proc/sys/kernel/sysrq
- echo b > /proc/sysrq-trigger # 下到這行就直接斷線,立刻重新開機了(若 b 改 o 為關機)
感謝網友提供不用切成 root 的做法
- echo 1 | sudo tee /proc/sys/kernel/sysrq
- echo b | sudo tee /proc/sysrq-trigger
上述參考自此篇:Linux: emergency reboot or shutdown with magic commands
您好, 重新開機應該是 b 而不是 o 喔
另有個不需 sudo su - 的方法與您分享
echo 1 | sudo tee /proc/sys/kernel/sysrq
echo b | sudo tee /proc/sysrq-trigger
o是關機,b是重新開機... 已修正~
將 tee 的寫法也補上去囉~ 謝謝~ 🙂
如果不想切 root 的話其實也可以考慮這樣做:
sudo sh -c 'echo 1 > /proc/sys/kernel/sysrq'
sudo sh -c 'echo b > /proc/sysrq-trigger'
或是合併
sudo sh -c 'echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger'
嗯嗯,感謝~
不過通常到這種時候,是可以都直接 root 硬幹了~ 😛