~Linux、MySQLからAJAXまでLinuxのinitプロセスのジョブ設定initプロセスが管理する対象は”ジョブ”と呼ばれていて、その各ジョブの設定方法についてまとめました※目次をクリックすると目次の下部にコンテンツが表示されます。・OS起動時にinitデーモンは/etc/initディレクトリ内にあるジョブ設定ファイルを読んで各ジョブを起動する。・ジョブの設定ファイルには、.confと.overrideの2種類ある。.overrideファイルは、同じ名前の.confファイルの設定内容に対する追加(上書き)設定で、.confファイルを直接修正せずに設定内容を変更できるメリットがある。・それぞれの設定ファイルでは、一つのサービス(長期間実行されるプロセスまたはデーモン)またはタスク(短期間実行されるプロセス)のテンプレートを定義する。・設定ファイルそのものは”ジョブ”ではなく、ジョブが実行される環境を記述したもの。設定ファイルの記述を具現化したランタイムがジョブ。・Upstartや関連するツールで表示される設定ファイル名は下記ルールに従う。id'2)ジョブの設定ファイルのフォーマット・各行は、設定スタンザから始まり、行末またはクロージングスタンザを含む行まで続く。・スタンザ内でもシングルまたはダブルクォート内、またはバックスラッシュの後であれば改行コードを使用できる。・重複したスタンザは最後のスタンザが有効になる。・認識されないスタンザがあるとparseエラーでジョブの実行が停止される。・スタンザとその引数は、空白文字、タブで区切られる。・”#”から始まり、行末まで内容はコメントとして無視される。・initデーモンによって実行されるサービスまたはタスクを定義する。・それぞれのジョブは、それらのライフタイムの一部として実行されるメインプロセスなどのプロセスを持つ。・メインプロセスは”exec”または”script”スタンザを使って定義される。exec|script...・メインプロセスが実行される前でジョブのstartingイベント後に実行されるプロセス。・必要なディレクトリの作成など環境の準備に使用される事が多い。※イベントについては以下の記事を参照。exec|script...・メインプロセスが呼び出された後、ジョブのstartedイベントの前に実行されるプロセス。・メインプロセスに必要なコマンドを送ったり、メインプロセスがクライアントに対する準備が整うまでstartedイベントを遅延させるなどの目的で使用される。on”スタンザによって停止する場合に実行されるプロセス。・ジョブのstoppingイベントが発行される前やメインプロセスがkillされる前に実行される。・メインプロセスにシャットダウンコマンドを送信する際やstopをキャンセルする引数を指定せずにstartをコールする際に使用される。exec|script...・メインプロセスがkillされた後、ジョブのstoppedイベントが発行された後に実行されるプロセス。・一時ディレクトリの削除など環境のクリーンアップに使用される。イベント定義によって制御できる。on”スタンザは、ジョブを自動起動させるイベントのセットを定義する。・”and”、”or”を使って複数のイベントを指定出来る。・”KEY”、”VALUE”を使って、イベント内に含まれる環境変数とマッチングさせる事が出来る。・”VALUE”は、ジョブの開始環境から引き継がれた値を拡張する事が出来る。それぞれのジョブは、ジョブを起動したイベントまたはコマンドからの環境を引き継いで実行される。・”UPSTART_EVENTS”という環境変数には、そのジョブを開始したイベントのリストを含んでいる。ジョブが手動で起動された場合は存在しない場合もある。・”pre-stop”、”post-stop”スクリプトは、ジョブを停止するイベントまたはコマンドの環境を引き継いで実行される。・”UPSTART_STOP_EVENTS”という環境変数には、そのジョブを停止したイベントのリストを含んでいる。ジョブが手動で起動された場合は存在しない場合もある。・すべてのジョブは、”UPSTART_JOB”、”UPSTART_INSTANCE”という環境変数を持ち、ジョブやインスタンスの名前を含んでいる。・上記環境変数は、initctlによって多く使用される。KEY=VALUE・デフォルトの環境変数を定義する。・ジョブを開始するイベントまたはコマンドによってオーバーライドされることもある。KEY・環境変数の値をこのジョブのstarting、started、stopping、stoppedイベントにエクスポートする。・ジョブはデフォルトでサービスで、そのジョブを開始するactはジョブが実行している時には終了されていることになる。ゼロのexitステータスでexitしたとき、そのサービスはrespawnされる。●taskスタンザ・そのジョブがサービスではなく、タスクである事を指定するこの場合はサービスの場合と異なり、ジョブそのものが実行されていて再び停止するまでジョブを開始するactは終了していないことを意味する。ゼロのexitスタータスでexitしたとき、そのタスクは完全に終了し、respawnされない。・”start”コマンド、”starting”イベント、”stopping”イベントは、サービス実行中のみ、または、タスクが終了するまでブロックされる。●respawnスタンザ・サービス、タスクは、異常終了した場合は自動で起動される。・”stop”コマンドによって終了した場合以外は、サービスの終了は異常終了とみなされる。・ゼロのexitステータスコードでexitしたタスクはrespawnされない。INTERVAL・ある時間内に一定数以上respawnしないように設定。・デフォルトは、COUNT数が10、INTERVALが5秒。・この設定は自動でrespawnされた場合のみで、”restart”コマンドには適用されない。STATUS|SIGNAL...・追加のexitステータスやシグナルを追加する。ここで設定したステータスやシグナルでジョブプロセスが終了した場合は、フェールしたとみなさず、respawnされない。・同時に存在できるジョブのインスタンス数は一つのみ。開始中または実行中にジョブを開始しようとするとエラーになる。・インスタンスの名前が定義されている場合は、同時に複数のインスタンスを実行する事もできる。同じ名前のインスタンスが開始中または実行中でなければエラーが発生せずに開始できる。NAME・このインスタンス名は、プロセスにジョブではなく個々のインスタンスを指定する場合に有用。listなどの出力では、複数のインスタンスを持つジョブは、ジョブ名のあとに括弧でインスタンス名が記述されて表示され、イベント内ではINSTANCE環境変数にセットされる。●概要リソースリミットなどプロセス環境に対して行われる設定をジョブ内で直接設定する事が出来る。output|owner・デフォルトでは、ジョブの入力、出力、エラーファイルディスクリプタは”/dev/null”に設定されている。この設定によって”/dev/console”に接続する事が出来る。・”owner”を設定するとシステムコンソールに接続すると同時にシステムコンソールのオーナーにも接続する。これによって”Ctrl-C”などがキー操作されるとカーネルからのシグナルを受信する事が出来る。Killer)メモリーを使い切り、必要なメモリー領域を確保出来ない場合にプロセスを強制終了させて空きメモリーを確保する仕組み。killerがどのプロセスを強制終了させるか判断する場合、通常はすべてのプロセスが同等に扱われるが、この設定によって優劣をつけて判断材料を与える。・ADJUSTMENTは、-16~14の数値で大きい値ほど強制終了されやすい。・neverにすると強制終了の対象からはずされる。DIR・このジョブのプロセスを指定したディレクトリのchroot環境で実行させる。HARD|unlimited・ジョブプロセスにシステムリソースリミットを設定する。stackkill、expectinitプロセスが管理するジョブ設定ファイルでプロセスのkillタイムアウト、デーモン、フォークに関する設定方法についてです。INTERVAL・実行中のジョブを停止する際にジョブのメインプロセスにシグナルを送るが、SIGTERMとSIGKILLシグナル間のインターバルを指定する。stop・ジョブのメインプロセスが実行準備状態になるとSIGSTOPシグナルを送信する。これによってinitは、ジョブのpost-startスクリプトが実行中または実行中と判断できるようになるまでこのシグナルを待機するようになる。・initは、このプロセスにcontinueを許可するのにSIGCONTシグナルを送信する。daemon・ジョブのメインプロセスがデーモンとして動作するように指定する。実行されるまでに2回フォークされる。・initはこのデーモン処理に続いて、ジョブのpost-startスクリプトが実行中または実行中と判断できるようになるまで待機する。・このスタンザがないとinitはデーモンプロセスを管理できず、デーモン処理の開始後すぐに停止したと判断しなければならなくなる。fork・実行後、ジョブのメインプロセスが一度フォークするように指定する。・initはこのフォーク処理に続いて、ジョブのpost-startスクリプトが実行中または実行中と判断できるようになるまで待機する。・このスタンザがないとinitはフォークプロセスを管理できず、フォーク処理の開始後すぐに停止したと判断しなければならなくなる。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。