thumbnail

サーバ起動時に特定の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コマンドのstartstop引数が入ります。

chkconfigコマンドでserviceを登録しておくと、起動時にserviceがstartの引数で実行されるため、start)に実行したいコマンドを記載しています。

start)に記載されている

su -l ec2-user -c "sh /home/ec2-user/myScript.sh"

はユーザーec2-userの権限でmyScript.shを実行するコマンドになります。

author picture

Mitsuru Takahashi

京都市内にてフリーランスエンジニアとして活動しています。

detail

Profile

author picture

Mitsuru Takahashi

京都市内にてフリーランスエンジニアとして活動しています。

detail

© 2022 mitsuru takahashi