サーバ起動時に特定の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 ;;
esac
3. 権限追加
serviceに実行権限を追加します。
$ chmod 775 /etc/init.d/myservice
4. 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
を実行するコマンドになります。