CentOSの起動スクリプトを書き方(+注意点)

投稿者: | 2014/04/14

サーバの起動時や停止時に特定のスクリプトを実行したい場合があります。
例えば、起動時に起動した旨をメール通知したり、停止時にログ(/var/log)をAWS S3などのストレージにバックアップで保存したりできます。若しくはApacheやnginxなどを野良ソースからコンパイルしてインストールした場合、起動スクリプトを作成することもあります。
そこで、今回は簡単な起動スクリプトを作成してみます。ただ、起動スクリプトの作成方法はネットで調べればいくらでも出てきますので、簡単に説明してハマりやすいポイントも押さえたいと思います。

今回の目標

  • サーバの起動時、停止時に特定のスクリプトを実行したい

サーバ環境

  • CentOS 6.41

スクリプトの作成

今回は簡単に以下のようなサンプルスクリプト(jicoman_test)を作成してみます。
起動時と停止時にメール通知するスクリプトです。

ここで何点かポイントを説明します。

  • 2行目では起動するランレベルと起動・停止の順序を指定します。

ランレベルについてはこの記事が参考になります。
26.4. ランレベル (Run Level)とは | Vine Linux CUIユーザーズガイド

注意としては、 スクリプトの起動順序を実行するために必要なプロセスが起動する順序より後に指定してください。たとえば、ログをrync等でバックアップするのにSSHプロセスが停止していたらバックアップを取ることができません。
例のスクリプトでは、mailコマンドを使っているため、Postfixなどのメール送信するために必要なプロセスが起動していないとメール送信できません。僕の環境だと、Postfixがこの起動順序が「80 30」なので、起動・停止において問題ありません。

  • Lockファイル(/var/lock/subsys/$PROG)を設定します。起動時にはLockファイルをtouchコマンドで作成し、停止時にはrmコマンドで削除します。
    このLockファイルが無いと停止の処理が実行されないので注意してください2
    参考: 自動停止のためには /var/lock/subsys 配下にファイルが必要 – メモの日々(2009-02-19)

  • $1 には起動時には「start」、停止時には「stop」が渡されます。case文で分岐させて処理を書いていますが、関数等で別に処理を書いても構いません。

chkconfigで自動起動設定

設定できたか確認します。

コマンドでスクリプトの起動確認

serviceコマンドで実行してみます。
実行した後に意図したメールが送信されれば完了です。

最後に

サーバの起動時と停止時に実行する起動スクリプトを書きました。
サーバの起動・停止する機会が無い場合は、あまり恩恵を受けないと思いますが、AWSのAutoScalingでEC2インスタンスを頻繁に起動する場合などに重宝すると思います。

  1. Amazon EC2でも同様に作成できます []
  2. 僕はここでハマりました []

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*