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


9

오래된 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가 랩톱에서 작동하지 않습니다. 커널 문제라고 생각하십니까?! 그것을 고칠 수있는 방법이 있습니까?


1
내가 제대로 이해하고, 당신이 원하는 경우 sonarr.serviceradarr.service후 실행할 수 mountgdrive.service및 실행?
Dan

@ 단 정확히! 문제는 방법은 내가 분명히 쓴이며, mountgdrive.service다음 실행 아무것도하지만 (이 드라이브를 마운트하지 않습니다)하지 않으며, sonarr.service그리고 radarr.service우분투 실행하기 때문에 정상적으로 실행mountgdrive.service
samsepioldoloresh4ze

1
또한 .mount단위 를 살펴 보는 것이 좋습니다 . mountgdrive.service디렉토리 나 이와 비슷한 것을 마운트하는 것이 전부라면 .mount서비스 로 변경할 수 있습니다 . 의존성이 있기 때문에 특히 신뢰할 수 있습니다.
Dan

답변:


26

이 문제가 발생하는 이유는 또는 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 )


감사 Wants=하고 WantedBy=, 내가 그들을 확실히 사용합니다! 노트북을 다시 시작할 때이 오류가 발생합니다. i.imgur.com/a3LE3G9.png
samsepioldoloresh4ze

1
스크립트에 오류가있는 것 같습니다. 로 끝나는 줄에서 볼 수 있습니다 Can't open /.config/SmokeScreen/smokescreen.conf. yoru 스크립트에 "~ / .config / ..."가있을 수 있습니다. 물결표 ( ~)를 전체 경로로 바꾸어야합니다 /home/you_user_name/.config/....( 예 : 스크립트에 상대 경로 사용)
Dan

github.com/FourFingerLifeHug/SmokeScreen/blob/master/…- 이것은 check.mount 스크립트이므로 모든 $ (HOME) 및 $ (bindir)을 전체 경로로 변경해야합니까? 감사!
samsepioldoloresh4ze

1
@ samsepioldoloresh4ze Yep $HOME는 아직 로그인 한 사용자가 없기 때문에 부팅시 사용할 수 없습니다.
Dan

해야 WantedBy=에있을 [Unit]섹션? 나는 그것이 들어갈 수 있다고 생각했다 [Install].
양키
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.