fstab이 마운트된 후 실행되도록 systemd 서비스 설정

fstab이 마운트된 후 실행되도록 systemd 서비스 설정

systemd .service시작해야 하는 스크립트를 작성 중입니다.뒤쪽에/etc/fstabCIFS 네트워크 위치는 /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원하는 결과를 얻지 못했습니다.

답변1

/etc/fstabCIFS 네트워크 위치는 /mnt/부팅 시 마운트됩니다.

전혀 그렇지 않다. 이것을 올바르게 하면 나머지는 제자리에 있게 될 것입니다.

마운팅은 systemd에 의해 처리됩니다(생성됨).설치단위다음과 같은 이름이 지정됩니다 mnt-wibble.mount. 다음 명령의 출력에서 ​​실제 이름을 볼 수 있습니다.

systemctl list-units --type=mount

다른 단위와 마찬가지로 자세히 볼 수 있습니다.

systemctl status

매우 간단합니다. 설치 장치가 시작된 후에 장치를 시작하도록 명령해야 합니다.

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

추가 읽기

답변2

두 답변 모두 정확하지만 토론을 찾을 때 진행 방법에 대한 몇 가지 지침과 예가 누락되어 토론에 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

참고: fstab 옵션에 추가해야 할 수도 있습니다 nofail(예: 외장 드라이브를 사용하는 경우). 그렇지 않으면 장치가 연결되지 않으면 머신이 부팅되지 않습니다. 바라보다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

답변3

죄송합니다. 아직 댓글을 달 수 없습니다.

JdeBP가 말했듯이 파일 시스템 마운트를 정렬해야 합니다. 설치된 장치의 이름을 예측하거나 (units 섹션에서) 다음을 사용할 수 있습니다.

RequiresMountsFor=/absolute/path/of/installation

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

답변4

@bm-bergmotte: 지도해 주셔서 감사합니다. 많은 도움이 되었습니다. 나에게는 내가 넣어야 작동합니다.

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

"mnt-cifs.mount"를 "필요"에 해당 순서대로 넣지 않으면 재부팅/시작되지만 장치가 마운트되지 않은 경우 서비스는 계속 시작됩니다. 디바이스가 설치되어 있지 않은 경우 추가로 "필수"로 설정하면 서비스 시작 전에 디바이스를 설치하게 됩니다.

관련 정보