upstart
開発中のパッケージの Web サーバーが常に実行されるように使用しようとしていますpydoc
。コマンドラインから実行すると、次のようになります。
pydoc -p 7464 /some_path/my_python_package
問題なく動作し、localhost:7464/my_python_package
ドキュメントが表示されます。しかし、これをupstartスクリプト内に置くと、例えば
start on startup
start on runlevel [2,3,4,5]
stop on runlevel [0,1,6]
script
pydoc -p 7464 /some_path/my_python_package
end script
ブラウザを開くとlocalhost:7464/my_python_package
次の画面が表示されます。
no Python documentation found for 'my_python_package'
localhost:7464
標準の Python パッケージはすべて通常どおり表示されるので、upstart がパスを正しく解析していないように見えることに注意してください。
export PYTHONPATH='/some_path'
を入力して実行行を変更してみましたpydoc -p 7464 $PYTHONPATH/my_python_package
が、これも機能しませんでした。
答え1
そのジョブで指定した構文が正しくありません:
- 複数の「 」スタンザがあります
start on
。 - 最後の '
start on
' スタンザは考慮されますが、ランレベル間にカンマを使用しているため無効です ('stop on
' も同じ理由で無効です)。
次のようなものが求められます:
start on runlevel [2345]
stop on runlevel [016]
script
pydoc -p 7464 /some_path/my_python_package
end script
Upstartのバージョン0.9.7以降(つまりUbuntu Natty以降 - 参照)では、https://wiki.ubuntu.com/NattyNarwhal/TechnicalOverviewアップスタートinit-checkconf
) には、スクリプトの構文エラーをチェックする という新しいコマンドがあります。使い方は簡単です:
$ init-checkconf myjob.conf
init-checkconf
ユーザーとして実行する必要があることに注意してください(ない根)。
また、これをシステム ジョブとして実行していますか (ジョブ ファイルは /etc/init/ にありますか)? その場合、サービスを root として実行する必要は本当にありますか? そうでない場合は、次を参照してください。
http://upstart.ubuntu.com/cookbook/#異なるユーザーとしてジョブを実行する
この場合、そのサービスを本当に root ユーザーとして実行する必要がありますか?
最後に、Upstart Cookbook の残りの部分もぜひご覧になることをお勧めします。