2017-01-13 10 views
0

私は、複数のインスタンスを実行できるUpstartサービスを持っています。 2つの動的パラメータを任意の組み合わせで指定できます。動的インスタンスを含むUpstart configをSystemdサービスに変換する

これをsystemd .serviceファイルに変換する方法はありますか?

start on (net-device-up and local-filesystems and runlevel [2345]) 
stop on runlevel [016] 

instance $C,$B 

exec [...] $C $B 

respawn 

答えて

2

systemdは、単一のテンプレートを使用して複数のサービスインスタンスを起動するために使用できるテンプレートをサポートしています。 man systemd.unitの文書から:

オプションで、ユニットはruntieのテンプレートファイルからインスタンス化されることがあります。これにより、1つのコンフィギュレーションファイルから複数のユニットを作成することができます( )。 systemdがユニット構成ファイルを検索すると、 はまず、ファイルシステム内のリテラルユニット名を検索します。 tatが成功しない場合、ユニット名に "@"文字が含まれていると、systemdは同じ名前を共有するユニットテンプレートを検索しますが、インスタンス文字列(つまり、@文字と接尾辞の間の部分)は削除されます。例: サービス[email protected]が要求され、その名前のファイルが見つからない場合、systemdは getty @ .serviceを検索し、見つかった場合はそのコンフィグレーションファイルからサービスをインスタンス化します。

設定ファイル内のインスタンス文字列を参照するには、多くの設定オプションで特別な "%i"指定子を使用できます。あなたのケースでは

、動的パラメータ「C」と「B」のサービスを開始すると、次のようになります。

systemctl start [email protected] 

にsystemdが唯一のインスタンス名で一つの変数をサポートしているので、次のように記述する必要があるかもしれませんラッパー・シェル・スクリプト。インスタンス名 "bc"をアンパックして、 "b"と "c"の値を分離して基礎となるサービスに渡します。

関連する問題