Upstart の job configuration file のデバッグ

job configuration file を書くときの準備。全部 cookbook に書いてあるのですが、一応。

ちなみに私が今回書いたのは Vagrant の precise box 用なので、 Upstart のバージョンは 1.5 となります。

ちゃんと認識されているか

# initctl list

System Job は /etc/init の中に XXXX.conf として配置する。

1.6 までの User Job は $HOME/.init/ だが、 User Job は仮想ターミナルへのログ出力機能が無いので root が無いとかどうしてもという時以外はあんまり使わない方が良さそう。 root を知っていれば Sytem Job 中で setuid/setgid した方が良い。

1.7 からの Session Job は $XDG_CONFIG_HOME/upstart/ なので分かりやすい(ただし、自分は使ったこと無い)。

デバッグ

# initctl log-priority debug

この後に、 /var/log/syslog と、 /var/log/upstart/XXXX.log を tailf しておく( XXXX はもちろんジョブ名です)

開始・終了・ステータス

# status oogatta-rails
# start oogatta-rails
# stop oogatta-rails

あるいは、 start on や stop on を検証したければ

# initctl emit eventname

で手動でイベントを emit できる。

upstart のログは /var/log/syslog に出て、 upstart で実行されるコマンドの標準出力・標準エラー出力は /var/log/upstart/XXXX.log に出るのでこの両方を見ておけばなぜ動かないかはわかる。

env stanza はユーザーの環境変数は弄れない。

これではまってしまった。

なので setuid した場合は、

setuid oogatta

script
    export PATH=/home/oogatta/bin/:$PATH
    ...
end script

とかやるのが良さそう。あと、例によってシェルは自分が触っている interactive shell とは違う環境なので、注意する。 Session Job 使いたいなー。

expect と script

22.2 Using expect with script sections

この問題があるのでなんかちょっとしたことやろうとすると綺麗にはまったりするので怖いところもある。