経緯
身内でゲームサーバを立てることになったので、AWSでゲームサーバを構築しました。
24時間起動する運用ではなく、平日の夜や土日にだけ起動するようにしたかった。
今後CloudWatchなどでを用いて、インスタンスの定時起動、終了を行うと思うと、
インスタンス起動時に毎回サーバに入ってゲームを起動するコマンド実行を自動化したかった。
やりたいこと
インスタンス起動時にゲームの起動するコマンドが実行されてゲームが起動したい。
使ったAMI
- Amazon Linux 2 AMI(64bit x86)
方法
AWSに限らず、Linuxには「chkconfig」があるらしい。
サーバ起動時の挙動を設定してくれている機能くらいの認識で使ってみた。
chkconfigを設定するまでの誤解
私がinputした情報
他のサイトみながら、やっていくと以下のディレクトリに起動時に動かしたいサービスを登録するらしい。
hoge登録するサービスは以下のような例
#!/bin/sh
case "$1" in
start)
sh -x /home/ec2-user/hoge_start_script.sh
;;
stop)
sh -x /home/ec2-user/hoge_stop_script.sh
;;
*) break ;;
esac
この情報だけを持って試しに動かしてみた。
サービス名の記述にはフォーマットがある
例を見て起動スクリプトだけ動かしたかった私はhogeサービスを作り、
起動するスクリプトだけ記載しました。
#!/bin/sh
sh -x /home/user/hoge_start_script.sh
以下のコマンドでサービスを登録しようとしたところ
と怒られました。
どうも原因は登録するサービスにもフォーマットらしきものがあるそうで、
私が認識したフォーマットは以下で第1引数start、stopの挙動を書くフォーマットにしないといけないそうです。
(私の認識なので語弊があるかもしれません)
#!/bin/sh
case "$1" in
start)
(起動時に動かすコマンド)
;;
stop)
(終了時に動かすコマンド)
;;
*) break ;;
esac
実行ユーザは指定しないといけない
サービスにフォーマットがあることを知り、以下の通り修正してみましたが、
インスタンス起動時に「hoge_start_script.sh」の挙動をしてくれませんでした。
#!/bin/sh
case "$1" in
start)
sh -x /home/ec2-user/hoge_start_script.sh
;;
stop)
sh -x /home/ec2-user/hoge_stop_script.sh
;;
*) break ;;
esac
今回私はAWSのデフォルトユーザである「ec2-user」で作成していましたが、
いろんなサイトを巡ったところ、
ユーザを指定してシェルを実行しないといけないそうです。
最終的に以下のようにサービスを修正することにより、
「hoge_start_script.sh」の挙動をしてくれました。
#!/bin/sh
# chkconfig: 2345 99 10
# description: start shell
case "$1" in
start)
su -l ec2-user -c "sh -x /home/ec2-user/hoe_script.sh start"
;;
stop)
su -l ec2-user -c "sh -x /home/ec2-user/hoge_script.sh stop"
;;
*) break ;;
esac
インスタンス起動時にゲームを起動するようにする手順まとめ
いろいろとはまりましたが、最後にec2インスタンス起動時に特定のシェルを動かすための手順をまとめます。
初めの作業はAWSのコンソール上での作業です。
-
サービスを作成する
cd /etc/init.d
sudo vi hoge
2. サービスのスクリプトを記載する
```
#!/bin/sh
case "$1" in
start)
su -l ec2-user -c "sh -x /home/ec2-user/hoe_script.sh start"
;;
stop)
su -l ec2-user -c "sh -x /home/ec2-user/hoge_script.sh stop"
;;
*) break ;;
esac
```
3. 権限付与
```
sudo chmod 775 /etc/init.d/hoge
```
4. 起動時のサービスに登録する。
ここからはAWSのEC2のGUI上で操作です。
インスタンスの停止が条件なので、この作業を行う前にインスタンスを停止しておいてください。
対象のサーバを選択し、
「アクション」-「インスタンスの設定」-「ユーザデータを編集」を選択する。
(「ユーザデータを編集」は下の方にあり、ないと勘違いすることもありますが、スクロールすればあります。)
ユーザーデータをテキストで変更を選択して、以下をテキストボックスに入れる。
sudo chkconfig --add hoge
sudo chkconfig hoge on
これでインスタンス起動時にhogeサービスのシェルが実行されるようになります。