当我通过 USB 插入 HD 时,它应该 a) 安装它 b) 运行我的备份脚本。
我目前拥有的是backintime.service
[Unit]
Description="Runs backintime to backup."
[Service]
User=user
ExecStart=/usr/bin/systemd-inhibit --what=sleep --why="Backup" "backintime -b"
启动备份脚本并backup.mount
[Unit]
Description=Backup Disk
Before=backintime.service
[Mount]
What=/dev/disk/by-uuid/931129c7-7f15-4042-9a69-796c9eb8ffc9
Where=/media/backup
但如何自动执行呢?
答案1
我正在努力实施一个非常相似的系统。我让它工作了,但我仍然想调整这个和那个(请参阅这个更一般的问题:systemd - 服务完成后卸载设备)。
这是解决您问题的有效解决方案:
备份服务
[Unit]
Description=<DESCRIPTION HERE>
BindsTo=<STORAGE DEVICE UNIT HERE>.device mnt-backup.mount
After=<STORAGE DEVICE UNIT HERE>.device mnt-backup.mount
[Service]
ExecStart=<CALL TO BACKUP SCRIPT HERE>
注意:要获取存储设备单元的列表,请使用systemctl list-units --all --full | grep disk
您可能想添加拒绝手动启动=在[单位]下也是。
mnt-备份.mount
[Unit]
DefaultDependencies=no
Conflicts=umount.target
Before=umount.target
[Mount]
What=/dev/disk/by-uuid/<DEVICE UUID HERE>
Where=/mnt/backup
Type=<FILESYSTEM HERE>
你已经差不多到这里了,现在要自动开始backup.service
,我们将使用udev规则。
在这里,您可能还想在 [Unit] 下添加 RefuseManualStart=yes。
90-备份.规则
KERNEL=="sd*", ATTRS{serial}=="<HD SERIAL HERE>", TAG+="systemd", ENV{SYSTEMD_WANTS}+="backup.service"
注意:要获取特定设备的属性列表(包括其序列号),请使用udevadm info -a -n /dev/sd*