다른 시스템 서비스가 시작되기 전에 시작시 시스템 서비스를 시작하려면 어떻게해야합니까? 된 폴더 중

오래된 HP 노트북에서 Ubuntu 16.04를 실행하고 있습니다.

작은 수제 플렉스 서버를 만들기 위해 소프트웨어를 설치했습니다. sonarr, radarr, deluge, jackett 등을 설치했으며 모두 시작시 자동으로 시작됩니다!

며칠 전에 나는 rclone도 설치하기로 결정했고 스크립트를 시작하여 각 시작시 마운트 해야하는 두 개의 폴더를 만들었습니다 (GitHub 프로젝트 덕분에 sudo ~/bin/check.mount). 나는 터미널 쓰기를 통해 시작합니다 . Sonarr와 Radarr는 deluge를 통해 temp 폴더로 물건을 다운로드 한 다음이 두 개의 탑재 된 폴더 중 하나로 내보내도록 설정되어 있습니다.

문제는 수동으로 스크립트를 시작할 때 Sonarr / Radarr가 이미 실행 중이며 루트 폴더를 찾을 수 없으므로 오류가 발생한다는 것입니다.

내가하고 싶은 일은 check.mount 스크립트를 자동으로 시작하는 mountgdrive.service (서비스 또는 필요한 것)를 만들고 충분하지 않은 경우 sonarr.service 및 radarr.service에 지연을 삽입하는 것입니다! 가능합니까?

나는 이것을 썼다. sudo nano /etc/systemd/system/mountgdrive.service

[Unit]
Description=MountSmokeScreen
After=network.target

[Service]
Type=oneshot
ExecStart=/home/samsepioldoloresh4ze/bin/check.mount
TimeoutStopSec=20
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

sonarr.service 및 radarr.service mountgdrive.serviceAfter=약간 추가되었습니다.

[Unit]
Description=Sonarr
After=syslog.target network.target mountgdrive.service

[Service]
User=samsepioldoresh4ze
etcetc
....

그러나 작동하지 않습니다! Sonarr과 Radarr가 정상적으로 시작되지만 드라이브가 마운트되지 않았습니다! 내가 무엇을 잘못하고 있지?


또한 rtcwake가 랩톱에서 작동하지 않습니다. 커널 문제라고 생각하십니까?! 그것을 고칠 수있는 방법이 있습니까?



답변

이 문제가 발생하는 이유는 또는 After=필요한 동안 사용 중이기 때문 입니다.Requires=Wants=

종속성 관리를위한 3 가지 주요 속성이 있습니다. 차이점을 간단히 설명하려고하지만 [Unit] 섹션 옵션 | freedesktop.org

  1. After=

    이 옵션은 장치의 순서 만 설정하며 서비스 시작을 보장하지는 않습니다.

  2. Wants=

    이 옵션을 사용하면 다른 장치가 시작된 후에 만 ​​장치를 시작할 수 있습니다. (성공적으로 시작했는지 여부는 중요하지 않습니다)

  3. Requires=

    Wants=그러나 마찬가지로 종속성이 성공적으로 시작된 후에 만 ​​장치가 시작됩니다.

각 옵션 의 역 을 사용할 수도 있습니다.

  1. After= 에 의해 반전 Before=
  2. Wants= 에 의해 반전 WantedBy=
  3. Requires= 에 의해 반전 RequiredBy=

문제를 해결하려면 마운트 서비스를 다음과 같이 변경해야합니다.

[Unit]
Description=MountSmokeScreen
After=network.target
Before=sonarr.service radarr.service

[Service]
Type=oneshot
ExecStart=/home/samsepioldoloresh4ze/bin/check.mount
TimeoutStopSec=20
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target sonarr.service radarr.service

또는 당신은 추가 할 수 있습니다 Wants=mountgdrive.service받는 사람 sonarr.serviceradarr.service단위.

다음을 실행하여 기본 파일을 수정하지 않고이를 수행 할 수 있습니다 (에 대해서도 동일하게 수행해야 함 radarr.service).

systemctl edit sonarr.service

그리고 다음을 삽입하십시오.

[Unit]
Wants=mountgdrive.service

참고 : 당신은 대체 할 수 Wants=와 함께 Requires또는 WantedBy=함께 RequiredBy=당신이 경우 두 서비스 모두에서 시작하지 않으려면 mountgdrive.service(비록 실패 Wants=일반적으로 충분하고도 문서에 권장).

편집 : WantedByRequiredBy옵션은 [Install]섹션 아래에서만 사용할 수 있습니다 . (감사합니다 @Yankee )


답변