SystemD는 N 프로세스를 생성합니까?

SystemD는 N 프로세스를 생성합니까?

우리 조직에는 작업자 프로세스를 사용하는 대기열이 많이 있습니다. 현재는 SupervisorD를 사용하여 관리하고 있지만 가능하다면 SystemD를 사용하여 이러한 이점 중 일부를 얻고 싶습니다. 나는 사용자 정의 단위를 작성하는 데 꽤 경험이 있지만 SystemD 세계에서 비슷한 것을 즉시 찾지 못했습니다.

내부에SupervisorD 문서"detailed"라는 매개변수를 사용 numprocs하면 사용자가 서비스를 시작하려는 프로세스 수를 설정할 수 있습니다. 30개의 프로세스를 시작하려면 한 줄만 변경하면 됩니다.

시작할 프로세스 수를 지정할 수 있는 설정이 SystemD 장치에 있습니까?

답변1

Munir가 언급한 것이 바로 그 방법입니다. 기본적으로 파일을 만든 service다음 30번 실행합니다. 다소 투박해 보일 수도 있지만, 오작동하는 경우 모든 항목을 종료할 필요 없이 그 중 하나를 종료할 수 있는 등의 장점이 있습니다. 관리를 단순화하기 위해 취할 수 있는 조치도 있습니다.

먼저 유닛 파일입니다. 예를 들어 파일을 만듭니다. 중요한 것은 기호입니다./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나중에 넣은 내용으로 대체된다는 점에 유의하세요 @.

약간의 shell-fu로 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.target30 systemctl 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

관련 정보