우리 조직에는 수많은 대기열 소비 작업자 프로세스가 있습니다. 현재 SupervisorD를 사용하여 관리하고 있지만 가능한 경우 SystemD를 사용하고 싶습니다. 사용자 지정 단위를 작성하는 데 상당히 익숙하지만 즉시 SystemD 랜드에 아날로그가 없습니다.
에서 SupervisorD 문서 라는 매개 변수는 numprocs
하나 그들이 서비스를 시작하고 싶습니다 프로세스의 수를 설정할 수있는 자세히 설명되어 있습니다. 30 개의 프로세스를 시작하려면 한 줄만 변경하면됩니다.
SystemD 단위에 시작하려는 프로세스 수를 지정할 수있는 설정이 있습니까?
답변
Munir가 언급 한 것은 정확하게 어떻게하는 것입니다. 기본적으로 service
파일 을 만들고 30 번 시작합니다. 이제는 조금 비천한 것처럼 보일지 모르지만 잘못 작동하는 경우 하나를 종료하고 모든 것을 종료하지 않아도되는 등의 이점이 있습니다. 관리를 쉽게하기 위해 할 수있는 일도 있습니다.
먼저 단위 파일입니다. 와 같은 파일을 작성하십시오 /etc/systemd/system/test@.service
. 중요한 것은 @
상징입니다.
내용은 다음과 같습니다.
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=multi-user.target
그리고 그것을 시작 systemctl start test@1.service
, systemctl start test@2.service
.
시작되는 프로세스는 다음과 같습니다.
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 test@1.service
.
이제 관리를 쉽게하기 위해 할 수있는 일이 무엇을 의미합니까? 아마도 test@{1..30}.service
모든 것을 관리하는 데 사용하고 싶지 않을 수도 있습니다 . 조금 다루기 힘들다. 대신 서비스에 대한 새 대상을 만들 수 있습니다.
로 작성 /etc/systemd/system/test.target
:
[Install]
WantedBy=multi-user.target
그런 다음 /etc/systemd/system/test@.service
다음과 같이되도록 조정하십시오 .
[Unit]
StopWhenUnneeded=true
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=test.target
로 시스템을 다시로드 systemctl daemon-reload
하십시오 (단위 파일을 수정하고 이전 버전을 건너 뛰지 않은 경우에만 필요). 이제을 수행하여 관리하려는 모든 서비스를 활성화하십시오 systemctl enable test@{1..30}.service
.
(이전에 서비스를 활성화 한 WantedBy=multi-user.target
경우 먼저 비활성화하여 종속성을 지 웁니다)
이제 systemctl start test.target
및을 수행 할 수 있으며 systemctl stop test.target
30 개의 프로세스를 모두 시작 / 중지합니다.
다시 부팅하면 다른 장치 파일처럼 부팅 할 수 있습니다 systemctl enable test.target
.
답변
다음은 virtualenv에서 실행되는 Python 스크립트를 사용하는 예제입니다.
/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 enable my-worker\@{1..30}.service
N 근로자 사용 : sudo systemctl enable my-worker\@{1..2}.service
새로 고침 : sudo systemctl daemon-reload
스타트: sudo systemctl start my-worker@2.service
상태를 확인하세요: sudo systemctl status my-worker@1