Linux supervisord
を使用して、monoで実行されるサービスを管理しています。これは、supervisord
v3.0b2を備えたUbuntu 14.04.2 LTSにあります。
コマンドがスーパーバイザによって呼び出されたときに認識されるように、モノラルのprogram-options引数を指定する方法を理解しようとしています。
モノのヘルプでは、コマンドの形式は次のとおりです。
mono [options] program [program-options]
サービスの構成ファイル/ etc/supervisor/conf.d/myservice.confでは、これらの形式の両方を試しましたが、どちらも機能しませんでした。サービスは開始されますが、-abc
引数は無視されます。
command=mono --gc=sgen MyService.exe -abc
command=mono --gc=sgen MyService.exe -- -abc
シェルで最初のコマンドを実行すると機能します(-abc
引数はサービスの起動時に認識され、ログに記録されます)。
mono --gc=sgen MyService.exe -abc
サービスの構成ファイルを変更するときは常にSudo supervisorctl rereadを使用することに注意してください。ここに完全なファイルがあります:
[program:myservice]
environment=LD_LIBRARY_PATH=.
command=mono --gc=sgen MyService.exe -- -abc
user=myuser
stderr_logfile=/var/log/myservice/myservice-err.log
stdout_logfile=/var/log/myservice/myservice-stdout.log
directory=/opt/myservice
何が欠けていますか?
この問題のトラブルシューティングを行うために、supervisord
プロセスのデバッグログを有効にすることにしました。うまくいけば、-myservice.confからどのコマンドが解析されたかを確認できます。
/ etc/supervisor/supervisord.confのsupervisord
セクションにloglevel=debug
という行を追加しました。次に/ var/log/supervisor/supervisord.logを尾行し、Sudo service supervisor restart
を使用してサービスを再起動すると、myserviceコマンド引数が認識されていることがわかりました。
ところで、次のコマンド形式を使用するように変更しました。
command=mono --gc=sgen MyService.exe -abc
そのため、何らかの理由でsupervisorctl reread
では不十分だったため、supervisord
サービスを再起動する必要がありました。