fstab 마운트 후 실행되도록 시스템 서비스 설정


33

내가 일하고 있어요 systemd .service시작하도록되어 스크립트 CIFS 네트워크 위치하기를 통해 장착 /etc/fstab/mnt/ 부팅에.

이 스크립트는 OpenVPN 종속성 스크립트가 먼저 시작될 때까지 대기하지만 마운트가 완료 될 때까지 대기하기를 원합니다.

/etc/systemd/system/my-daemon.service :

[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service

나는 systemd.mount줄 에 추가하려고 시도했지만 After=network.target vpn-launch.service systemd.mount원하는 결과를 얻지 못했습니다.


당신이 추가하면 그것은 작동합니까 systemd-remount-fs당신에 After목록?
Eric Renouf

답변:


40

CIFS 네트워크 위치를 통해 장착 /etc/fstab으로 /mnt/부팅에.

전혀 그렇지 않다. 이것을 올바르게하면 나머지는 자연스럽게 제자리에 들어갑니다.

마운트는 이름이 같은 (생성 된) 시스템 마운트 유닛에 의해 처리됩니다 mnt-wibble.mount. systemctl list-units --type=mount명령 출력에서 실제 이름을 볼 수 있습니다 . 를 사용하는 다른 장치와 마찬가지로 자세히 볼 수 있습니다 systemctl status.

간단히 말해서, 마운트 장치가 시작된 후에 장치가 시작되도록 주문해야합니다.

After = network.target vpn-launch.service mnt-wibble.mount

추가 자료


10
"systemctl list-units --type = mount"로 마운트 마운트
nijave

추종자들에게 "
흔들림

17

죄송하지만 아직 댓글을 달 수 없습니다.

JdeBP가 말했듯이 파일 시스템 마운트에서 주문해야합니다. 마운트 유닛의 이름을 예측하거나 (섹션 섹션에서) 다음을 사용할 수 있습니다.

NeedMountsFor = / 절대 / 경로 / of / mount

이 옵션은 서비스를 시작하기 전에 경로에 액세스 할 수 있도록 적절한 * .mount 장치에 대한 종속성을 만듭니다. 모든 시스템 버전에있는 것은 아니지만 지난 6 개월 정도 CentOS 7 시스템에서 사용하고 있습니다.


( 바닐라 시스템의 차이점은 여기에 있습니다 .) RequiresMountsFor=자체 경고 세트가 있습니다. 함께 레드햇 버그 # 1088057크리스 Siebenmann 손에, 당신은 대답 할 수 있어야한다 superuser.com/questions/988734을 . 이 질문에서도 CIFS 마운트입니다. 그러나 그 의미는 auto다행이다.
JdeBP

@JdeBP 댓글 주셔서 감사합니다. 나는 그 기능에 관한주의와 문제를 알지 못했습니다.
miguelbernadi

14

두 대답이 모두 맞지만 토론에 2 센트를 추가하고 싶습니다. 왜냐하면 그것을 찾을 때 몇 가지 지침과 진행 방법에 대한 예제가 빠져 있었기 때문입니다.

  1. 파일 시스템을 추가하십시오 /etc/fstab
  2. mount -afstab에 언급 된 모든 파일 시스템을 마운트하는 유형
  3. 다음으로 생성 된 시스템 단위를 찾으십시오.

    systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'

    (로 끝나는 것을 반환해야 함 .mount)
  4. 찾은 마운트 단위를 파일 의 After=명령문에 추가 *.service하십시오.

다음은 시작하는 예입니다 my-daemon부팅 네트워크가 준비 후하지만, CIFS 공유가 장착되어에서 서비스 /mnt/cifs하고, vpn-launch서비스가 시작이 :

/ etc / fstab

//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0

참고 : nofailfstab 옵션 에 추가 할 수 있습니다 (예 : 외장 드라이브 사용시). 그렇지 않으면 장치가 연결되어 있지 않으면 컴퓨터가 부팅되지 않습니다. 참조 ArchWiki의 fstab에 기사를


/etc/systemd/system/my-daemon.service

[Unit]
Description=Launch My Daemon
Requires=vpn-launch.service mnt-cifs.mount
After=network.target vpn-launch.service mnt-cifs.mount

[Service]
ExecStart=/path/to/my-daemon

[Install]
WantedBy=multi-user.target

부팅시 서비스가 시작되도록 서비스를 활성화하는 것을 잊지 마십시오. systemctl enable my-daemon

이것은 다른 파일 시스템 (NFS, HDD 등)에서도 작동합니다.

이미 언급했듯이 두 가지 답변이 모두 정확하고 모두가 읽을 것을 권장하지만 몇 가지 예가 시간을 절약 할 수 있습니다.

업데이트 (2019-06-25) :

  • 외부 드라이브를 사용할 때 부팅 잠금을 방지하기 위해 fstab 옵션에 대한 메모 추가
  • cifs 마운트가 성공적으로 마운트되지 않은 경우 시작 실패를 야기 mnt-cifs.mount하는 Requires=목록에 추가됨my-daemon.service

"mnt-cifs.mount"는 특정 마운트 지점에 대한 마운트 장치의 이름입니다 systemctl list-units --type=mount.
smdvlpr

1

@ bm-bergmotte : 많은 도움을 주신 귀하의 지시에 감사드립니다. 나를 위해 그것은 내가 작동하면 그냥 작동합니다

After=network.target vpn-launch.service mnt-cifs.mount
Requires=vpn-launch.service mnt-cifs.mount

"Requires"안에 "mnt-cifs.mount"를 넣지 않으면 (이 순서대로) 재부팅 / 시작할 수 있지만 장치가 마운트되지 않으면 서비스가 시작됩니다. ""필수 "안에 추가로 넣은 후 장치가 마운트되지 않은 경우 서비스는 장치를 시작하기 전에 장치를 마운트합니다.


네 말이 맞아 마운트가 실패하면 my-daemon.service가 시작됩니다. After=순서를 지시합니다. Requires=cifs 마운트가 반드시 있어야합니다 ( Supiyan Ghori 답변 참조 ). 답변을 업데이트하겠습니다.
bm-bergmotte
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.