Database JUNKY

MySQL,MariaDBを中心としたブログです

aws ec2インスタンス起動時に、自作shellを自動実行する方法

あ、別にawsでなくてもいいのですが、そしてshellでなくても良いのですがw よくあるかどうかまではわかりませんが、アプリケーションを手動で起動して待機させる系統のものって、インスタンスを再起動さける時に、あら。動いてない。。。なんてことがありますよね?まぁ、インスタンスが起動してから、手動で実行すればいいのですが、それも面倒なので、この際、インスタンスが起動したら、自動的にアプリケーションが起動するという設定をしてみようじゃないかと思いメモがてら書いてきます。

今回の例は、pythonは、 api_app.py と app.pyをshellで起動する例(というかメモ)で、説明します。

対象python appをshell化

shell化っていうか、shellの中にpythonを書いただけです。

ログアウトした時、プロセスが落ちないように、nohupを入れて、且つ、バックグラウンドで起動するように&を入れております

# cat /usr/local/start_app.sh
----------------------------------
#!/bin/bash

nohup /usr/bin/.pyenv/shims/python3 /usr/local/api_app.py >> /tmp/api_app.log 2>> /tmp/api_app_error.log &
nohup /usr/bin/.pyenv/shims/python3 /usr/local/app.py >> /tmp/app.log 2>> /tmp/app_error.log &


exit 0

起動起動の設定

/etc/init.d に、下記ファイルを作成します

# cat /etc/init.d/app_start
-------------------------------
#!/bin/sh
# chkconfig: 345 99 10
# description: start_app shell
case "$1" in
  start)
    bash /usr/local/start_app.sh
       ;;
  stop)
     /usr/bin/pkill python
       echo "stop!"
       ;;
  *) break ;;
esac

すこし補足しますと、2行目の

# chkconfig: 2345 99 10

は、

2345 : 実行されるランレベルの数値

ランレベル

0 : システム終了時
1  : シングルユーザモード
2-5 :マルチユーザモード
6 : 再起動時

99 : 起動時にスクリプトを実行する順序です。昇順に実行されます 10 : 停止時にスクリプトを実行する順序。降順に実行されます ↑うまく説明できませんが(笑)後述の、/sbin/chkconfig --add app_startを実行すると、

# pwd
/etc/rc5.d

lrwxrwxrwx 1 root root 20  9月  4 05:22 S99app_start -> ../init.d/app_start

というようなものが登録されます。降順。昇順といったのは、このS99の数字の部分です。 複数、addすると連番になるんじゃないかなー?と思いつつ。

よくわからないので、こちらのほうが詳しく書いてあります(笑)

dev.classmethod.jp

実行権限を付与

# cd /etc/init.d
# chmod 775  app_start

自動起動の設定登録

# /sbin/chkconfig --add app_start

自動起動をONにする

# /sbin/chkconfig app_start on
# /sbin/chkconfig --list app_start
----------------------------------------------
app_start       0:off   1:off   2:on    3:on    4:on    5:on    6:off

以上で設定は終わりです。ここまで設定しておけば、インスタンス停止から開始した時に、対象のshellが自動実行されると思います。

補足

上記設定をすることで、サービスの開始、停止をすることもできますの

停止

# /etc/init.d/app_start stop

開始

# /etc/init.d/app_start start

本来、もっと細かく書いたほうが良いと思うのですが、ここまでなら簡単にできますよってことを教えたかっただけです

f:id:hit10231023:20180309123622p:plain