SystemDはNプロセスを生成しますか?

SystemDはNプロセスを生成しますか?

私たちの組織にはワーカープロセスを使用するキューがたくさんあります。現在はSupervisorDを使用して管理していますが、可能であればSystemDを使用してこれらの利点のいくつかを取得したいと思います。私はカスタムユニットを書くのにかなり経験がありましたが、SystemDの世界で同様のものをすぐに見つけることができませんでした。

内部にSupervisorDドキュメント「detailed」というパラメーターを使用するnumprocsと、ユーザーがサービスを開始するプロセスの数を設定できます。 30個のプロセスを開始するには、1行だけ変更できます。

起動するプロセスの数を指定できる設定はSystemDデバイスにありますか?

答え1

Munirが言及したのがまさにその方法です。デフォルトでは、ファイルを作成してservice30回実行します。多少這うように見えるかもしれませんが、誤動作する場合、すべての項目を終了する必要なくそのうちの1つを終了できるなどの利点があります。管理を簡素化するために取ることができるアクションもあります。

まずユニットファイルです。たとえば、ファイルを作成します。重要なのはシンボルです。/etc/systemd/system/[email protected]@

その内容は次のとおりです。

[Service]
ExecStart=/bin/sleep 600 %I

[Install]
WantedBy=multi-user.target

それから始めなさい。開始されたプロセスは次のとおりです。systemctl start [email protected]systemctl start [email protected]

root     17222  19   0  0.0  0.0 Ss         00:05 /bin/sleep 600 1
root     17233  19   0  0.0  0.0 Ss         00:02 /bin/sleep 600 2

実行すると、%I後で入れた内容に置き換えられることに注意してください@

わずかなシェルフーで30個すべてを起動できます。

systemctl start test@{1..30}.service

通常のサービスのように起動時に有効にすることもできます。systemctl enable [email protected]

 

test@{1..30}.service今私が言う管理をより簡単にすることができるということは、これらすべてを管理するためにそれを使用したくないかもしれないということです。ちょっとおっぱいです。代わりに、サービスの新しいターゲットを作成できます。

作る/etc/systemd/system/test.target

[Install]
WantedBy=multi-user.target

次に、次のように調整します。/etc/systemd/system/[email protected]

[Unit]
StopWhenUnneeded=true

[Service]
ExecStart=/bin/sleep 600 %I

[Install]
WantedBy=test.target

systemdを再ロードしますsystemctl daemon-reload(ユニットファイルを変更し、以前のバージョンをスキップしない場合にのみ必要です)。次の手順を実行して、管理したいすべてのサービスを有効にしますsystemctl enable test@{1..30}.service
(以前にサービスを有効にした場合は、WantedBy=multi-user.targetまずサービスを無効にして依存関係を削除してください)

これで実行すると、systemctl start test.target30systemctl stop test.targetのプロセスがすべて起動/停止されます。
同様に、他のユニットファイルのように起動時に有効にすることができますsystemctl enable test.target

答え2

以下は、virtualenvで実行されるPythonスクリプトを使用する例です。

/etc/systemd/system/[email protected]

[Unit]
Description=manages my worker service, instance %i
After=multi-user.target

[Service]
PermissionsStartOnly=true
Type=idle
User=root
ExecStart=/usr/local/virtualenvs/bin/python /path/to/my/script.py
Restart=always
TimeoutStartSec=10
RestartSec=10

障害がある:sudo systemctl disable my-worker\@{1..30}.service

Nワーカーを有効にする:sudo systemctl enable my-worker\@{1..2}.service

リロード:sudo systemctl daemon-reload

スタート:sudo systemctl start [email protected]

ヘルスチェック:sudo systemctl status my-worker@1

関連情報