mount 명령 후 systemd 서비스를 시작하는 방법

mount 명령 후 systemd 서비스를 시작하는 방법

저는 Linux 과정을 위한 실습을 하고 있고 선생님은 Systemd에 대해 가르치고 있습니다.

다음을 사용하여 특정 장치가 설치될 때 스크립트를 시작하는 서비스를 만드는 방법: mount /dev/xvdc1 /mnt/backup

내가 시도한 것

  1. 타이머를 사용하여 /mnt/backup마운트 지점인지 확인합니다. (선생님은 그것을 받아들이지 않을 것입니다. 그것은 엄격하게 이벤트 중심이어야 합니다)
  2. .mount 단위를 생성하고 .service 단위에 .mount 단위가 필요하도록 만듭니다. 이 접근 방식은 명령을 실행할 때 스크립트를 시작하지 않습니다.mount /dev/xvdc1 /mnt/backup

나는 이것에 잘못된 방식으로 접근하고 있다고 생각합니다. 이것은 실험실 문제입니다.

/mnt/backup "한 번 설치되면 rsync를 사용하여 모든 파일을 복사하는 유닛 파일을 생성합니다 /dev/xvdc1."

알아요:

  1. 설치될 장치는 항상/dev/xvdc1
  2. 장치의 마운트 지점은 항상/mnt/backup
  3. /dev/xvdc1마운트된 기반으로 서비스를 시작해야 합니다.

이것은 내 .service 단위 파일입니다.

[Unit]
Description=Starts a backup for /dev/xvdc1 when mounted using the mount command.

[Service]
Type=simple
ExecStart=/root/backupscript.sh
ExecStop=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

답변1

시스템 장치 시작 조건

장치를 시작하기 전에 ConditionPathExists=를 사용하여 파일 존재 조건을 확인하십시오. 지정된 절대 경로 이름이 없으면 조건이 실패합니다. ConditionPathExists=에 전달된 절대 경로 이름 앞에 느낌표("!")가 붙으면 테스트가 무효화되고 경로가 존재하지 않는 경우에만 장치가 시작됩니다.

ConditionPathIsMountPoint= ConditionPathExists=와 유사하지만 경로가 존재하고 탑재 지점인지 확인합니다.

가장 쉬운 방법은 다음을 포함하는 것 같습니다.

ConditionPathIsMountPoint=/mnt/backup

당신 [Unit]측에서. 이것이 확인되지는 않지만어느백업 생성과 관련하여 사용자가 까다롭지 않을 수도 있지만 장치는 여기에 설치됩니다.

Restart=on-failure서비스 시작을 계속 시도 해야 할 수도 있습니다 .


보다 정확한 접근 방식은 udev특정 장치가 설치될 때 서비스를 시작하는 규칙을 작성하는 것입니다.

참조

먼저 lsusb에서 장치를 찾으세요. ID를 적어두세요(예: 0a81:0101)

sudoedit /etc/udev/rules.d/100-mount-videos.rules를 통해 /etc/udev/rules.d/에 새 udev 규칙 파일을 생성하고 다음과 같이 새 규칙을 추가합니다.

ACTION=="추가",ATTRS{idVendor}=="0a81",ATTRS{idProduct}=="0101",RUN+="/home/your_username/bin/mount_videos.sh"

또는 귀하가 말하는 다른 서비스 RUN+=로 대체할 수 있습니다.RUN+=/usr/bin/systemctl start backup.service

관련 정보