これが私が探していたpythonの例です。@
サービスのファイル名に使用すると、Nプロセスを開始することができます:
$ cat /etc/systemd/system/my-worker@.service
[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 daemon-reload
これで、さまざまな方法で開始/停止できます。
開始1:
sudo systemctl start my-worker@2.service
複数開始:
sudo systemctl start my-worker@{1..2}
複数停止:
sudo systemctl stop my-worker@{1..2}
ステータスを確認します。
sudo systemctl status my-worker@1
更新:インスタンスを1つのサービスとして管理するには、次のようにします。
/etc/systemd/system/some-worker@.service:
[Unit]
Description=manage worker instances as a service, instance %i
Requires=some-worker.service
Before=some-worker.service
BindsTo=some-worker.service
[Service]
PermissionsStartOnly=true
Type=idle
User=root
#EnvironmentFile=/etc/profile.d/optional_envvars.sh
ExecStart=/usr/local/virtualenvs/bin/python /path/to/my/script.py
TimeoutStartSec=10
RestartSec=10
[Install]
WantedBy=some-worker.service
/usr/bin/some-worker-start.sh:
#!/bin/bash
systemctl start some-worker@{1..10}
/etc/systemd/system/some-worker.service:
[Unit]
Description=manages some worker instances as a service, instance
[Service]
Type=oneshot
ExecStart=/usr/bin/sh /usr/bin/some-worker-start.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
そして今、あなたはですべてのインスタンスを管理することができます sudo systemctl some-worker (start|restart|stop)
ここにいくつかの定型文がありますscript.py
:
#!/usr/bin/env python
import logging
def worker_loop():
shutdown = False
while True:
try:
if shutdown:
break
# Your execution logic here.
# Common logic - i.e. consume from a queue, perform some work, ack message
print("hello world")
except (IOError, KeyboardInterrupt):
shutdown = True
logging.info("shutdown received - processing will halt when jobs complete")
except Exception as e:
logging.exception("unhandled exception on shutdown. {}".format(e))
if __name__ == '__main__':
worker_loop()