Systemd requireBy 지시문이 무시되었습니다.

Systemd requireBy 지시문이 무시되었습니다.

이것은 내 서비스 파일입니다.

[Unit]
Description=Blabla service
Requires=network-online.target nfs-common.service
After=network-online.target nfs-common.service

[Service]
Type=oneshot
ExecStart=/path/to/script
RemainAfterExit=no

[Install]
RequiredBy=php5-fpm.service apache2.service nginx.service

활성화되면 유망해 보입니다.

# systemctl enable blabla.service 
Created symlink from /etc/systemd/system/php5-fpm.service.requires/blabla.service to /etc/systemd/system/blabla.service.
Created symlink from /etc/systemd/system/apache2.service.requires/blabla.service to /etc/systemd/system/blabla.service.
Created symlink from /etc/systemd/system/nginx.service.requires/blabla.service to /etc/systemd/system/blabla.service.

그런 다음 다시 시작한 후 systemd-analyze다음을 제공합니다.

# systemd-analyze blame
         18.434s blabla.service
          5.942s cloud-init.service
          2.766s networking.service
          1.671s apache2.service
          1.398s cloud-init-local.service
          1.276s newrelic-sysmond.service
           856ms php5-fpm.service
           586ms nginx.service
           .....

문서에 따르면 Type=oneshot:

oneshot은 단순하게 동작하지만 systemd가 후속 유닛을 시작하기 전에 프로세스가 종료되어야 합니다.

어떤 아이디어가 있나요?

답변1

RequiredBy=이는 하나의 서비스가 다른 서비스를 시작해야 한다는 의미는 아닙니다.

에서는 man systemd.unit설명서에 다음과 RequiredBy=같이 나와 있습니다.

주요 결과는 나열된 장치가 시작될 때 현재 장치가 시작된다는 것입니다.

즉, 병렬로 시작될 수 있습니다. Before=설치 섹션에 지시문이 있어야 한다고 생각합니다 . 의 문서에는 man systemd.unit다음과 같은 내용이 있습니다 Before=.

foo.service 장치에 Before=bar.service 설정이 포함되어 있고 두 장치가 모두 시작 중인 경우 foo.service가 시작될 때까지 bar.service 시작이 지연됩니다. 이 설정은 Requires=로 구성된 요구 사항 종속성과 독립적이며 직교합니다.

관련 정보