クラウド上のインスタンスで作業をする際、夜中に処理回すために手動でシャットダウンが出来ないorそもそもシャットダウンを忘れてしまうことが度々ある。
インスタンス稼働の無駄を防ぐ為に、決まった時間にCPUが稼働していなければ自分を停止させる。
環境
CentOS 7.6
タイムゾーンの変更(UTC->JST)
$ timedatectl set-timezone Asia/Tokyo
このコマンドで一発で変更可能のよう
定期実行するジョブを指定
$ crontab -e
vimで編集する。
書き方の基本ルールはこう。
分 時 日 月 曜日 実行コマンド
定時で強制停止
稼働の有無に関わらずシャットダウンする場合はcronをこう編集。
0 0 * * * /usr/sbin/shutdown -h now
CPU稼働状況を見て停止
計算中はシャットダウンしたくない!とかなら、cronには以下を記載し、別にシェルスクリプトを用意する。
0 0 * * * /PATH/shtdwn.sh
gitのリンクはこちら
自分で作る場合は以下のコマンドで
$ vi ./shtdwn.sh
稼働率が一定以下ならインスタンスを停止する。閾値はよしなに。
(今回はひとまず10%に)
#!/bin/bash
cpuused=`cat /proc/loadavg | cut -d ' ' -f 1`
thresh=0.10
LIMIT=`echo "$cpuused <= $thresh" | bc`
if [ $LIMIT -eq 1 ] ; then
echo "インスタンス停止"
sudo /usr/sbin/shutdown -h now
else
echo "インスタンス稼働中"
fi
実行権限を設定
$ chmod +x ./shtdwn.sh
参考にさせていただいたページ
https://eng-entrance.com/linux-command-crontab
https://qiita.com/toshihirock/items/461da0f60f975f6acb10