本番環境のホームディレクトリ直下を全削除した話
かれこれもう10年以上昔の話です。
旧システムから新システムへリプレイスする案件で、本番環境オープンの1週間程前に事件は起こりました。
データやコンテンツを旧システムから新システムに移行する要件があり、シェルスクリプトで処理を行います。
移行スクリプトを実行して、コーヒーブレイクのために離席します。
しばらくしてから席に戻ると机にはお客様からの電話の着信を知らせる付箋が貼ってあります。
お客様に電話すると、やけに慌てた様子でした。
「急に本番環境にアクセスできなくなりました!!」
お客様の方では、本番環境に静的ファイル等のコンテンツファイルを登録したり、デザインのチェックなどを行っていました。
特別思い当たるフシもなかったのですが、アプリケーションが異常終了したかと思い、SSHでサーバーに接続します。
アプリケーションのディレクトリーへ移動するコマンドを叩きます。
cd: no such file or directory
嫌な予感がしましたが、この時はタイプミスだろうと思い、ls
コマンドで移動先のディレクトリーを確認します。
$ ls -l
合計 0
0?
慌てて pwd
コマンドを実行しても、アプリケーションユーザーのホームディレクトリーにいます。
なにが起こったんだ・・・?
吹き出る汗。
ふるえるぜハート!血液のビートを刻みそうになってました。
原因は、先程実行したデータ移行用のシェルスクリプトにありました。
シェルスクリプトは以下のような内容でした。
# /bin/bash
cd aaa
cd ../
cd bbb
cd ../
cd ccc
rm -rf ./
シェルスクリプトの中では何回かcd
コマンドを使ってディレクトリーを移動して、ファイルのコピー、移動、削除などを行っていました。
ただし、シェルスクリプトの中ではcd
の戻り値を評価して制御を分けるような事はしていませんでした。
cd
コマンドで移動に失敗しても、シェルスクリプトが終了するわけではありません。ただ、そのディレクトリーから移動しないだけです。
何度かcd
コマンドで移動を繰り返した結果、ホームディレクトリーに移動し、とどめの一撃 rm -rf ./
でカレントディレクトリー配下を全削除していたのでした。
お客様の方で静的コンテンツファイルなどをバックアップしており、無事にシステムリニューアルは出来たのですが、エンジニアになって最も魂が震えた事件でした