サーバーを誤って、シャットダウンさせた事ありますか?
経験した事はございますか?
あの瞬間、「ア゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛ッ゛!゛!゛!゛!゛!゛!゛」という声が思わず出てしまいました。今思い出しても、背筋が凍るような感覚です。遊園地のフリーフォールに乗った直後のような、あの何とも言えない浮遊感。わかるかな...?
つい先日、サーバーメンテナンス作業前に、よりによって本番環境で稼働しているサーバーを誤ってダウンさせてしまいました。本当に指先1つでダウンです。
ある晴れた日のこと
メンテナンス作業の手順を行う際に、実際にサーバーにログインして、設定内容の確認や動いているサービスの確認を行なっていました。
確認作業は、手順書内のコマンドをコピペして、行なっていました。systemctl status 〇〇等のステータス確認系のコマンドを主に叩いていました。確認自体は無事滞りなく、完了しました。
次は手順書を印刷しようと思い、メモ帳に手順書をコピペしました。(プロジェクト管理ツールのコメントに手順書が記載されていた為。印刷する際に、メモ帳等に転記する必要があった。)
メモ帳にコマンドを貼り付けた瞬間に、やたらとコンソール上に文字が流れていきます。
「コピペミスった。CTRL + Cでキャンセルと...」
キャンセル出来ません。しかも、最終行に下記メッセージが出力されていました。
Connection to サーバ名 closed.
最初は、ssh切れてしまったと呑気に考えていましたが、pingも通りません。
コンソールに流れているコマンド等を確認してみます。sudo shutdown -h now
が流れているではありませんか。
ここでやっと...気付きました。
手順書には改行コードが含まれており、私が貼り付けした瞬間に、上から順番に、コマンドが実行されていったのです。まるで、ドミノ倒しのように。そして、そのドミノの最後には、恐ろしい「sudo shutdown -h now」の文字が鎮座していたというわけです。
コピペという名の甘い罠。そして、無駄にコンソールを開いていたという油断。この二つが、見事に私を地獄へと突き落としたのです。
完全に頭真っ白になりかけましたが、誤ってメンテナンス前に、サーバーをシャットダウンしてしまった旨をチャットで報告し、データセンターまで復旧に行きました。
復旧自体は、手順書内にサービスの立ち上げコマンドが既に用意されている状態だったので、すんなり復旧出来ました。
データセンターまで向かう私の気持ちは、文字通り、爆散です。物理的には無事でしたが、私の精神は粉々に砕け散りました。
幸いにも、サービスに影響がなかったので、その点だけは救いでした。(監視サーバーをシャットダウンした。)
これがDB等を扱っている主要なサーバーだったら、おそらく物理的にも私は爆散していた事でしょう。
何か対策方法あるの?
色々思いつきますが、うちでは手順書を作る際に、sudo
コマンドをつけない方向となりました。
確認作業は個人ユーザーで行うので、万が一同じ事が起こっても、コマンドが実行されません。
その他にも、sudoersを適切に運用する方法やシャットダウン専用のスクリプトを用意する等も思いつきますが、既存サーバーや構成完了ツールの設定変更の作業も別途発生する可能性があります。
ちゃんとした対策を考えると、運用コストが大きくなってしまう可能性を懸念して、sudo
コマンドをつけない方針になりました。(今後同じ事象が多発する場合は、別途対策を考える必要は勿論あります。)
やらかす前の私へ、まだやらかす前の君へ
あの時、確認作業が終わった際にコンソールを閉じなかった自分に、事故るから作業終了後には、コンソール閉じろと膝蹴りかましたい。
これがコンソールではなく、別のところに貼り付けが行われていたのであれば、こんな事故はおこらなかったはずだ。
作業が終わったら、コンソールは閉じよう。
そして、コンソールを複数開くのも、危険だ。
そして、shutdown -h now
じゃなくて、shutdown -h 5
等でシャットダウンに間を持たせても良かったんじゃないか?
いきなり死なれたら、私何も出来ないよ...。
最後に
やらかした瞬間は、かなり焦りましたし、落ち込みました、
でも、世の中には自分以上にやらかしてる人もいます。rm -rf コマンドでサーバー壊した人
やdrop databaseで本番DB飛ばした人
など色んな人がいるようですw
それに比べたら、大したことはありません。
いつか後輩ができたら、私も昔こんな事やらかしたと笑って、話したいと思います。
「稼働中のサーバーをシャットダウンした事あるんだ」って...
この悲しみを、いつか優しさに昇華させます。