USB 드라이브를 마운트 해제할 때 systemd를 사용하여 스크립트 실행

USB 드라이브를 마운트 해제할 때 systemd를 사용하여 스크립트 실행

USB 드라이브를 마운트할 때 스크립트를 호출하는 시스템 서비스가 있습니다. signal.service:

[Unit]
Description= Updater trigger
Requires=usb-drive.mount
After=usb-drive.mount

[Service]
ExecStart=/usr/bin/signal

[Install]
WantedBy=usb-drive.mount

그러면 올바른 순서가 생성됩니다. Journalctl:

systemd[1]: Mounting /mnt/usb...
systemd[1]: Mounted /mnt/usb.
systemd[1]: usb-drive.mount: Succeeded.
systemd[1]: signal.service: Succeeded.

이제 사용자가 USB 드라이브를 분리하고 시스템이 드라이브를 마운트 해제할 때 스크립트를 실행(마운트 지점 폴더 제거)하고 싶습니다. udev 규칙을 만들었습니다.

ACTION=="remove", KERNEL=="7-1.1",SUBSYSTEM=="usb", RUN+="/usr/bin/removeFolder.sh"

문제는 드라이브가 마운트 해제된 후에 스크립트가 호출되는 경우도 있고 드라이브가 마운트 해제되기 전에 호출되는 경우도 있다는 것입니다.
다음 이후에 스크립트가 호출되도록 하려면 어떻게 해야 합니까?

systemd[1]: Unmounted /mnt/usb. 

아니면 시스템이 드라이브를 마운트 해제할 때 systemd를 사용하여 스크립트를 실행하는 방법은 무엇입니까?

내 목표는 제거할 때 /mnt/usb 폴더를 삭제하는 것입니다. 어쩌면 systemd 또는 udev 규칙이 필요하지 않을 수도 있습니다. /etc/fstab에 추가 규칙을 추가하면 그렇게 할 수 있습니까? 현재 다음과 같은 규칙이 있습니다.

/dev/sda1        /mnt/usb    auto     nofail,rw     0 2  

답변1

몇 가지 정보를 찾을 수 있습니다.이 블로그 게시물

기본적으로 udev의 매뉴얼 페이지에서는 더 긴 프로세스에서는 RUN+=를 사용하지 말 것을 권장합니다.Archlinux 포럼 주제그들은 실행하려는 스크립트에 대한 systemd 단위를 제공하고 udev 규칙에서 호출할 수 있도록 SYSTEMD_WANTS를 사용하는 솔루션을 제안했습니다.

다음과 같은 것이 필요합니다: 스크립트를 호출하는 시스템 서비스:

[Unit]
Description=Delete /mnt/usb folder on unmount
Requires=usb-drive.mount
After=usb-drive.mount

[Service]
ExecStart=/usr/bin/removeFolder.sh

[Install]
WantedBy=usb-drive.mount

udev 규칙:

ACTION=="remove", KERNEL=="7-1.1",SUBSYSTEM=="usb", ENV{SYSTEMD_WANTS}=="removefolder.service"

당신이 말했듯이, 아마도 첫 번째 시스템 서비스부터 시작하는 것이 더 합리적일 것입니다.

관련 정보