插入 USB HDD 时运行脚本的 Systemd 服务

插入 USB HDD 时运行脚本的 Systemd 服务

我正在尝试在插入 USB HDD 时运行备份脚本,我使用的是 Ubuntu 16.04。

备份脚本还应该在完成后卸载(并可能关闭)磁盘。

我没有/etc/fstab该磁盘的条目。我简单地为它分配了一个标签(4tb)e2label,它会自动安装到/media/koichirose/4tbkoichirose 拥有的。到目前为止一切都很好。

这是系统服务:

[Unit]
Description=Launches backup script when the 4TB WD drive is plugged in
Requires=media-koichirose-4tb.mount
After=media-koichirose-4tb.mount

[Service]
ExecStart=/home/koichirose/scripts/backup_to_4tb

[Install]
WantedBy=media-koichirose-4tb.mount

如果我启用此功能并插入 HDD,/media/koichirose/4tb则会创建并由 root 拥有,不久后/media/koichirose/4tb1就会创建并由 koichirose 拥有。驱动器实际上安装在 4tb1 上,而 4tb 是空的。然后,备份脚本运行并失败,因为它查找“4tb”而不是“4tb1”。如果我卸载 4tb1,4tb 仍然存在,由 root 拥有。

如果我禁用该服务,一切都会再次正常,驱动器已安装到 4tb,并且该目录由用户正确拥有。

我怎样才能解决这个问题?

额外问题:在我的脚本末尾,我当前正在执行umount.这很好,但我发现:

udisksctl unmount -b /dev/sdc1
udisksctl power-off -b /dev/sdc

这将卸载驱动器并关闭其电源。它有两个问题:它要求我输入 sudo 密码(我希望它能够在无人值守的情况下运行),并且它使用设备名称(可能会更改)而不是挂载点(我试图将其设置为“静态”)。

编辑:这是备份脚本(/home/koichirose/scripts/backup_to_4tb):

#!/bin/bash

export RESTIC_PASSWORD="mypassword"
repo_path=/media/koichirose/4tb/restic_incoming_backups
dir_to_backup=/home/koichirose

/usr/local/bin/restic -r $repo_path backup $dir_to_backup

#replace with udisksctl later...
umount /media/koichirose/4tb

相关内容