
サーバ起動時に特定のscriptを走らせる
2022/02/18
ec2を例にしていますが、linuxであればだいたいどのサーバでも手順は同じだと思います。
手順
1. 起動時に走らせたいscriptファイルを用意する
起動時に実行させたいscriptを事前に用意しておきます。
(例として今回は~/myScript.shを用意したと仮定します)
2. /etc/init.d配下に独自サービス(initスクリプト)の作成
/etc/init.d直下に以下のserviceファイルを作成します。
/etc/init.d/myservice
#!/bin/sh
# chkconfig: 2345 90 10
# description: start shell
case "$1" in
start)
su -l ec2-user -c "sh /home/ec2-user/myScript.sh"
;;
stop)
;;
*) break ;;
esac3. 権限追加
serviceに実行権限を追加します。
$ chmod 775 /etc/init.d/myservice4. chkconfigコマンドによるサービスの登録
chkconfig --addで起動時のサービス一覧に自作サービスを追加、chkconfig onで起動時のサービス実行を有効化して完了です。
$ chkconfig --add myservice
$ chkconfig myservice on次回移行の起動時にmyScript.shが実行されると思います。
補足:登録サービスの解除
起動時のサービス実行を無効化したい場合は
$ chkconfig myservice offでOKです。 また、そもそもの登録したserviceをリストから削除したい場合は以下のコマンドで可能です。
$ chkconfig --del 補足:initスクリプトのheader部分について
initスクリプト内のchkconfig行はデフォルトでサービスを開始するランレベルを決定するために使用されます。
# chkconfig: <default runlevels> <startpriority> <endpriority>
# description: <some description><default runlevels>: サービスがデフォルトで開始されるべきランレベルのリスト<startpriority>: サービスを開始する際の優先度<endpriority>: サービスが終了する際の優先度(100 - <startpriority>とするのが基本らしい)
例えば、
# chkconfig: 2345 90 10
# description: start shellはランレベルが2, 3, 4, 5のいずれかで実行されるべきサービスで、開始優先度は90、終了優先度は10という意味になります。
ちなみに各ランレベルの意味は以下のとおりです。
- 0: シャットダウン(システムの停止)
- 1: シングルユーザーモード(rootのみ)
- 2: ネットワークなしのマルチユーザーモード
- 3: 通常のマルチユーザーモード(テキストログイン)
- 4: 未使用(ユーザー定義可能)
- 5: グラフィカルログインによるマルチユーザーモード
- 6: システムの再起動
補足:initスクリプトの中身について
case "$1" in
start)
su -l ec2-user -c "sh /home/ec2-user/myScript.sh"
;;
stop)
;;
*) break ;;
esac上記スクリプトの$1にはserviceコマンドやsystemctlコマンドのstartやstop引数が入ります。
chkconfigコマンドでserviceを登録しておくと、起動時にserviceがstartの引数で実行されるため、start)に実行したいコマンドを記載しています。
start)に記載されている
su -l ec2-user -c "sh /home/ec2-user/myScript.sh"はユーザーec2-userの権限でmyScript.shを実行するコマンドになります。
