私はサービスとして実行したいいくつかのデータを処理するためにPythonスクリプトを作成しました。スクリプトはデータを処理している間、新しい着信データを処理するのを待ちます。
私の問題は、処理するデータソースが複数あり、スクリプトが一度に1つのデータソースを処理できるようになっているため、サービスの複数のインスタンスを実行したいということです。
私はいくつかの異なるアプローチを見ました。
すべてのデータソースを処理するスクリプトを再構築できます。これにより、一時的な目的で使用できなくなり、追加または削除されたソースを自動的に取得できなくなるため、データソースセットを更新することがより困難になります。可能であっても、私が好きではないオプションです。
処理したいデータソースのスクリプトを起動するラッパースクリプトをbashまたはPythonにすることができます。ちょっと酷い感じもします。
各データソースの単位ファイルを生成でき、各単位ファイルは適切なパラメータを使用して処理スクリプトを呼び出します。これにより、複数のシステムファイル(processing_ds1.system、processing_ds2.systemなど)が提供されます。私には、これがそうしない妥当な理由がない限り、可能な方法のように感じられます。
私が好むアプローチは、各データソースのパラメータを使用して呼び出すことができる、またはシステムファイルのすべてのインスタンスに対して起動できるシステムファイルを作成することです。
したがって、2つのオプションがあります。
ユニットファイルでパラメータを使用するには? @を使用してpostgresqlを別のバージョンで起動できることがわかりました。
systemctl start postgres@12-main
クラスタ12メインを起動します。しかし、これはどうなりますか? postgresqlに役立つ単位ファイルが見つかりません。
または
1つのユニットファイルから複数のサービスを起動することは可能で推奨されていますか?
ベストアンサー1
テンプレート単位のファイルを使用できます。システム装置
OpenVPNを例にしてみましょう。次の内容で[email protected]
名前が in のユニットファイルを生成できます。/etc/systemd/system
[Unit]
Description=OpenVPN connection to %i
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
systemdが実行されるたびに、
systemctl start openvpn@myconfig
ユニットファイルの%iが "myconfig"に置き換えられます。したがって、/usr/sbin/openvpn --config /etc/openvpn/myconfig.conf を実行します。