sleepy コマンド
さくらのアドベントカレンダー2022 13日目の記事です。
サーバ運用を行なっていると、非同期で行われるサーバの設定反映や起動を待ったり、メンテナンス後に監視を再開する前にすこし待つなんてこともあるかと思います。
そんな時に、人力で3分待ったらコマンドを打つ、Webコンソールを操作するなんてやっていると人間「必ず」忘れます。監視のメンテナンスモードの解除などを忘れてしまうとそれこそ事故につながります。チェックリストを利用した対策もありますが、技術的に解決するのが望ましい姿です。
そこで、よくやってきたのがsleepコマンドと組み合わせて
sleep 180 && mkr update --st working
とする方法。(サンプルとしてMackerelでサーバのステータスを変更しています)
このように実行しておけば、自動で3分後にmkrコマンドが実行され、サーバの監視をもとに戻してくれます。この方法をしばしば使っていたのですが、ひとつだけ不満がありました。
それは、今どれくらいsleepしたのか分からない、あとどれくらいでmkrコマンドが動くのかを知りたいというものです。
date && sleep 180 && mkr update --st working
このようにdateコマンドを最初に実行すれば、あとどれくらいだろーと気になった時にターミナルに表示された時間と今の時間と見比べれば、あとどれくらいで完了するのかわかるかもしれません。が、もう少し怠惰にしたいです。
ということで、なんか作るかなと思いつつ、twitterでぼやいてみました。
プログレスバーがでるsleepコマンドがほしい
— 達人が教えるつぶあん🇺🇦 (@kazeburo) 2022年9月7日
すると、わずか19分後に完成していました。チャットAIさんもびっくりな速さです
眠たいので sleepy コマンド作った。 pic.twitter.com/9hP8cwUmKt
— mattn (@mattn_jp) 2022年9月7日
mattnさん速すぎです。
せっかくなので、自分の利用に合うように、小数点を含む秒数、infinityのサポートと経過時間の表示を追加してもらい、お仕事でも使ってます。
以下は監視を一時的に止めつつ、さくらのクラウドでサーバのスペックを変更する例。
mkr update --st maintenance <hostId> usacloud server shutdown <hostID> —zone <zone> -y usacloud server update <hostID> --zone <zone> --cpu 3 --memory 4 -y usacloud server boot <hostID>--zone <zone> -y sleepy 360 mkr update --st working <hostId>
複数台のサーバのスペックを変更していくような場合には状況が可視化されていると、心理的安全性高く作業にあたれますね。