여기 내가 찾던 파이썬 예제가 있습니다. @
서비스 파일 이름에 당신은 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
업데이트 : 인스턴스를 하나의 서비스로 관리하려면 다음과 같이 할 수 있습니다.
/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()