0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Oracle Cloud] 誰もログインしていないサーバーを自動で停止する

Last updated at Posted at 2021-05-11

1. 本記事について

開発・検証などの用途でクラウド環境を用意していて、
課金額の節約のためにしばらく誰もサーバーにログインしてない時は
自動で停止するスクリプトを書いてみました。

課金額を節約するという観点では、9:00~17:00など定刻で起動停止するように
設定するのも手ですが、もう少し柔軟に対応したい時に使えるかもしれません。

2. 前提

UnixベースのOSがインストールされたサーバー(インスタンス)であること。
OCICLI(Oracle Cloudのコマンドラインインターフェース)が対象サーバーに
セットアップ済であること。

・[参考] OCICLIのセットアップ手順
Oracle Cloud : コマンド・ライン・インタフェース(CLI) をインストールしてみた

3. スクリプト

ログインしているユーザー数を定期確認して、
指定時間ログインがなければ停止します。
バックグラウンドで流しておいて使うイメージです。
"DEST_OCID"に対象サーバーの識別用のIDを指定します。

・Computeインスタンス用

# !/bin/bash

# 対象インスタンスOCID
DEST_OCID="ocid1.instance.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxx"
# シャットダウンまでの無ログイン時間(秒)
SHUTDOWN_THRESHOLD=3600
# ログインユーザ数チェック間隔(秒)
CHECK_INTERVAL=600

# ログインユーザ監視処理
while [ $((COUNT * CHECK_INTERVAL)) -lt ${SHUTDOWN_THRESHOLD} ];
do
        LOGIN_USER_COUNT=`who | wc -l`
        if [ ${LOGIN_USER_COUNT} = 0 ]; then
                COUNT=$(( COUNT + 1 ))
        else
                COUNT=0
        fi
        sleep ${CHECK_INTERVAL}
done

# インスタンス停止コマンド発行
echo "閾値に達したためインスタンスを停止します"
oci compute instance action --instance-id ${DEST_OCID} --action stop

・Database Cloud用

# !/bin/bash

# 対象インスタンスOCID
DEST_OCID="ocid1.dbnode.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxx"
# シャットダウンまでの無ログイン時間(秒)
SHUTDOWN_THRESHOLD=3600
# ログインユーザ数チェック間隔(秒)
CHECK_INTERVAL=600

# ログインユーザ監視処理
while [ $((COUNT * CHECK_INTERVAL)) -lt ${SHUTDOWN_THRESHOLD} ];
do
        LOGIN_USER_COUNT=`who | wc -l`
        if [ ${LOGIN_USER_COUNT} = 0 ]; then
                COUNT=$(( COUNT + 1 ))
        else
                COUNT=0
        fi
        sleep ${CHECK_INTERVAL}
done

# インスタンス停止コマンド発行
echo "閾値に達したためインスタンスを停止します"
oci db node stop --db-node-id ${DEST_OCID} --action stop

4. OCIDの確認方法

・Computeインスタンスの場合
Oracle Cloudの管理コンソール画面から
[コンピュート]⇒[インスタンス]⇒[インスタンスの詳細]
image.png

・Database Cloudの場合
[Oracle Database]⇒[ベア・メタル、VMおよびExadata]⇒[DBシステム]⇒[DBシステムの詳細]⇒[ノード]
image.png

5. 注意点

実際に使用する場合はsystemdなどでスクリプトをサービス化して
サーバーの起動と共にスクリプトが動くようにするかと思います。

この場合、無ログイン時間の閾値を誤って極端に短く設定してしまうと
サーバー起動⇒スクリプト自動起動⇒即時に閾値到達⇒停止処理 となって
ログインできず復旧が困難となる恐れがあるので注意が必要です。

6. 参考

Oracle Cloud Infrastructure CLI Command Reference

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?