システム単位での環境変数の使用

システム単位での環境変数の使用

システムサービスユニットファイルに環境変数を動的に割り当てる方法はありますか?

4つのGPUを持つマシンがあり、各GPUがサービスの複数のインスタンスを起動したいと考えています。たとえば、

  • gpu_service@1:1.service
  • gpu_service@2:1.service
  • gpu_service@3:1.サービス
  • gpu_service@4:1.サービス
  • gpu_service@1:2.service
  • gpu_service@2:2.service
  • gpu_service@3:2.service
  • gpu_service@4:2.service
  • 嫌な

したがって、1:1、2:1などは実際にはサービス単位ファイルの%iです。

サービスを特定のGPUにバインドするために、サービス実行可能ファイルは特定の環境変数をチェックします。たとえば、次のようになります。

USE_GPU=4

サービス単位ファイルから%iを取得し、いくつかの(シェル)関数を介して実行してGPU番号をエクスポートし、それに応じてUSE_GPU環境変数を設定する方法はありますか?

/etc/systemd/system/gpu_service@x:y.service/local.conf最も重要なのは、より多くのインスタンスを起動するために複数のファイルを作成する手間がかからないことです。

ベストアンサー1

注意が必要な場合は、インスタンスサービスファイルに小さなbashスクリプトシーケンスをexecコマンドに統合できます。例えば

ExecStart=/bin/bash -c 'v=%i; USE_GPU=$${v%:*} exec /bin/mycommand'

$$文字列はbashに渡された結果では単一になりますが、もっと重要なのはsystemdによる補間が$停止されることです。${...}(以前のバージョンのsystemdには文書化された使用法がなかった$$ため、その時点でサポートされていたかどうかはわかりません。)

おすすめ記事