使用molly-guard保護(hù)你的Linux/Unix機(jī)器不會(huì)被錯(cuò)誤地關(guān)機(jī)/重啟
我去!又是這樣。 我還以為我登錄到家里的服務(wù)器呢。 結(jié)果 重啟的居然是數(shù)據(jù)庫(kù)服務(wù)器。 另外我也有時(shí)會(huì)在錯(cuò)誤終端內(nèi)輸入 “shutdown -h 0” 命令。 我知道有些人 經(jīng)常會(huì)犯這個(gè)錯(cuò)誤 。
我的憤怒無(wú)從容忍
有辦法解決這個(gè)問(wèn)題嗎?我真的只能忍受這種隨機(jī)重啟和關(guān)機(jī)的痛苦嗎? 雖說(shuō)人總是要犯錯(cuò)的,但總不能一錯(cuò)再錯(cuò)吧。
***我在 tweet 上發(fā)了一通牢騷:
我總是一遍又一遍地犯下同樣的錯(cuò)誤 :( 本來(lái)應(yīng)該輸入:
sudo virsh reboot d1
卻總是輸錯(cuò)重啟了自己的電腦
sudo reboot d1
-- nixCraft (@nixcraft) February 19,2017
結(jié)果收到了一些建議。我們來(lái)試一下。
向你引薦 molly guard
Molly-Guard 嘗試阻止你不小心關(guān)閉或重啟 Linux 服務(wù)器。它在 Debian/Ubuntu 中的包描述為:
這個(gè)包會(huì)安裝一個(gè) shell 腳本來(lái)屏蔽現(xiàn)有的
shutdown
/reboot
/halt
/poweroff
/coldreboot
/pm-hibernate
/pm-suspend*
命令。molly-gurad
會(huì)首先運(yùn)行一系列的腳本,只有在所有的腳本都返回成功的條件下, 才會(huì)調(diào)用真正的命令。 其中一個(gè)腳本會(huì)檢查是否存在 SSH 會(huì)話。 如果是通過(guò) SSH 會(huì)話調(diào)用的命令, shell 腳本會(huì)提示你輸入相關(guān)閉主機(jī)的名稱。 這應(yīng)該足夠防止你發(fā)生意外的關(guān)機(jī)或重啟了。
貌似 molly-guard 還是個(gè)專有名詞:
一種用于防止由于笨拙或者不小心觸碰道大紅開(kāi)關(guān)的屏障。最初指的臨時(shí)蓋在 IBM 4341 的大紅按鈕上的有機(jī)玻璃,因?yàn)橛幸粋€(gè)程序員蹣跚學(xué)步的女兒(名叫 Molly)一天之內(nèi)重啟了它兩次。 后來(lái)這個(gè)東西也被用來(lái)蓋住磁盤和網(wǎng)絡(luò)設(shè)備上的停止/重啟按鈕。在硬件目錄中,你很少會(huì)看到 “guarded button” 這樣無(wú)趣的描述"。
如何安裝 molly guard
使用 apt-get
命令 或者 apt
命令 來(lái)搜索并安裝 molly-guard:
$ apt search molly-guard
$ sudo apt-get install molly-guard
結(jié)果為:
Fig.01: Installing molly guard on Linux
測(cè)試一下
輸入 reboot
命令 和 shutdown
命令:
$ sudo reboot
# reboot
$ shutdown -h 0
# sudo shutdown -h 0
### running wrong command such as follows instead of
### sudo virsh reboot vm_name_here
$ sudo reboot vm_name_here
結(jié)果為:
Fig.02: Molly guard saved my butt ;\)
我超級(jí)喜歡 molly-guard。因此我將下行內(nèi)容加入到 apt-debian-ubuntu-common.yml
文件中了:
- apt:
name: molly-guard
是的。我使用 Ansible 在所有的 Debian 和 Ubuntu 服務(wù)器上都自動(dòng)安裝上它了。
相關(guān) : 我的 10 大 UNIX 命令行錯(cuò)誤
如果我的 Linux 發(fā)行版或者 Unix 系統(tǒng)(比如 FreeBSD) 沒(méi)有 molly-guard 怎么辦呢?
不用怕,設(shè)置 shell 別名 :
## bash shell example ###
alias reboot = "echo 'Are you sure?' If so, run /sbin/reboot"
alias shutdown = "echo 'Are you sure?' If so, run /sbin/shutdown"
你也可以 臨時(shí)取消別名機(jī)制運(yùn)行真正的命令。比如要運(yùn)行 reboot 可以這樣:
# \reboot
或者
# /sbin/reboot
另外你也可以寫一個(gè) shell/perl/python 腳本來(lái)調(diào)用這些命令并要求 確認(rèn) reboot
/halt
/shutdown
的選項(xiàng)。