DRYの原則に応じて、わずかに異なるシステム構成を作成するよりも、名前が異なるシステム構成へのシンボリックリンクまたはハードリンクを使用することをお勧めしますmyservice1.service
。myservice2.service
$0
SysV initscriptsを使用すると、起動スクリプトの名前を決定するために使用でき、.conf
Upstartファイルを使用する自動変数がありますが、$UPSTART_JOB
systemdドキュメントで同様のものを検索しましたが、成功しませんでした。どんなアイデアがありますか?
答え1
Systemdには、単一の単位ファイルが引数を受け入れて別のインスタンスを起動できるテンプレートがあります。典型的な例はgettyです。
~ systemctl cat [email protected] | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM
これにより、systemctl start getty@tty7
サービスを開始する前にsystemdに置き換えられます%I
。tty7
あなたのファイルでそれを使用する方が簡単ですmyservice.service
。名前を指定し、[email protected]
コマンドラインで or を適切に使用します%I
。%i
ExecStart
関連:
答え2
%p
(エスケープ済み)または(エスケープされていない).from%P
と同じ$UPSTART_JOB
Systemdユニットとユニットファイルの理解:
関連情報を含むインスタンス単位を解釈するときに置き換えられるより一般的な指定子は次のとおりです。
%n
:完全な結果ユニット名がテンプレートファイルに表示されるたびに挿入されます。%N
:上記と同じですが、すべてのエスケープ(ファイルパスパターンにあるものなど)はキャンセルされます。%p
:ユニット名のプレフィックスを示します。@
単位名称のうち記号の前にくる部分です。%P
:上記と同じですが、エスケープは逆に行われます。%i
@
:インスタンス単位の後に続く識別子であるインスタンス名を示します。これは動的であることを保証するため、最も一般的に使用される指定子の1つです。この識別子を使用すると、構成に重要な識別子を使用できます。たとえば、サービスが実行されるポートをインスタンス識別子として使用でき、テンプレートはこの指定子を使用してポート仕様を設定できます。%I
:この指定子は上記と同じですが、エスケープは反対です。%f
:エスケープされていないインスタンス名または接頭辞付きの名前に置き換えられます/
。%c
:デバイスの制御グループを表し、標準の/sys/fs/cgroup/systemd/
上位階層を削除します。%u
:デバイスを実行するように構成されたユーザーの名前。%U
:上記と同じですが、名前の代わりに数値UIDを使用します。%H
:この装置が稼働しているシステムのホスト名。%%
:リテラルパーセント記号を挿入するために使用されます。
テンプレートファイルで上記の識別子を使用すると、systemdはテンプレートを解釈してインスタンス単位を作成するときに正しい値を入力します。
信用は行くムル私の検索結果を改善するための「テンプレート」リファレンスを入手してください。