USB 드라이브가 있는데 이를 연결하면 자동으로 암호가 해독되고 마운트됩니다. 그런 다음 설치 후 백업 스크립트를 실행하여 로컬 FS를 디스크에 동기화합니다. 그런 다음 드라이브를 꺼냈습니다.
드라이브를 삽입하면 암호가 해독되어 마운트되고, 스크립트가 실행되고, 드라이브가 마운트 해제/꺼지도록 이 작업을 자동화하고 싶습니다. (완료되면 알림을 받을 수 있으면 좋겠지만 선택사항입니다.)
그래서 systemd를 사용해 보았지만 다른 솔루션에도 열려 있습니다. (비록 지금은 systemd와 씨름하는 데 시간을 보냈지만 이것이 어떻게 작동하는지 이해하고 싶습니다.)
현재 저는 USB 드라이브 설치에 의존하는 서비스를 만들려고 합니다. 그러나 드라이브가 연결되어 있지 않으면 서비스가 활성화되지 않고 마운트가 존재하지 않는다고 불평합니다.
그런 다음 경로 단위를 만들려고 합니다.
[Unit]
Description=Monitors the backup path availability
[Path]
PathExists=/run/media/user/backup
[Install]
WantedBy=multi-user.target
경로를 사용할 수 있으면 해당 서비스가 시작됩니다.
[Unit]
Description=Rsync System Backup
Requires=usb-hd-backup.path
[Service]
ExecStart=/usr/bin/rsync -aAXS --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /run/media/user/backup
[Install]
WantedBy=graphical.target
처음은 괜찮습니다. 그러나 드라이브를 마운트 해제하면 경로가 그대로 유지됩니다(스크립트를 수동으로 시작할 때는 이런 일이 발생하지 않습니다). 따라서 다음에 드라이브를 연결하면 암호가 해독되고 원래 경로가 이미 있으므로 다른 경로에 마운트됩니다(원본과 동일하며 끝에 "1"이 추가됨). 따라서 스크립트는 드라이브로 연결되지 않는 경로로 실행됩니다(그리고 /run 설치가 매우 작기 때문에 실패합니다).
나는 systemd에 내가 여기서 실제로 이해하지 못하는 몇 가지 아이디어가 있다고 생각합니다.