web-dev-qa-db-ja.com

スーパーバイザープログラム:xコマンドによる環境変数の拡張$(ENV_VAR)s?

Program:xコマンド引数を拡張するために、構成(この場合はサイト名)をスーパーバイザー環境変数に入れたいと思います。これはサポートされていますか?ドキュメントの文言は「はい」を示しているように思われます。

次の構文は、supervisor-3.0(構成ファイルの抜粋)では機能しません。

[supervisord]
environment = SITE="mysite"

[program:service_name]
command=/path/to/myprog/myservice /data/myprog/%(ENV_SITE)s/%(ENV_SITE)s.db %(program_name)s_%(process_num)03d
process_name=%(program_name)s_%(process_num)03d
numprocs=5
numprocs_start=1

次のエラーが発生します。

Sudo supervisord -c supervisord.conf                                            

Error: Format string
'/path/to/myprog/myservice /data/myprog/%(ENV_SITE)s/%(ENV_SITE)s.db %(program_name)s_%(process_num)03d'
for 'command' contains names which cannot be expanded

ドキュメントを読んで、私は環境変数が%(ENV_VAR)sとしてprogram:xコマンドで拡張できることを期待していました:

http://supervisord.org/configuration.html#program-x-section-values

コマンド:

「文字列式は、キーgroup_name、Host_node_name、process_num、program_name、here(supervisord構成ファイルのディレクトリ)、およびENV_で始まるすべてのsupervisordの環境変数を含む辞書に対して評価されます。」

導入:3.0

関連:

追加のセクション値の拡張を有効にするためのオープンプルリクエストがあります。

https://github.com/Supervisor/supervisor/issues?labels=expansions&page=1&state=open

グール(またはSO)を検索しても、コマンドセクションの値で%(ENV_VAR)の展開を使用しようとした例は返されません。

https://www.google.com/search?q=supervisord+environment+expansion+in+command

29
Jeff Kowalczyk

私は、監督者がこれについて明確ではないことに同意します(少なくとも私には)。

/ bin/bash-cを実行する最も簡単な解決策を見つけました。あなたの場合は次のようになります。

    command=/bin/bash -c"/path/to/myprog/myservice /data/myprog/${SITE}/${SITE}.db ..."

どう思いますか?

ここでインスピレーションを見つけました: http://blog.trifork.com/2014/03/11/using-supervisor-with-docker-to-manage-processes-supporting-image-inheritance/

3
user1830432

あなたはそれを正しくやっています。ただし、監視対象セクションで定義されたENVは、構成のロード中に何らかの理由でプロセスで使用できるようにはなりません。このように監視を開始した場合:

SITE=mysite supervisord 

正しく実行され、その変数が展開されます。なぜsupervisordが環境に追加し、サブプロセスの構成拡張で使用できるようにするのに問題があるのか​​わかりません。環境変数はサブプロセス内で使用できると思いますが、サブプロセス構成宣言で変数を展開する場合は使用できません。

2
Bradley Kreider