在插入 systemd 的 HD 上运行备份

Rea*_*onk 6 backup systemd backintime

当我通过 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"
Run Code Online (Sandbox Code Playgroud)

启动备份脚本和 backup.mount

[Unit]
Description=Backup Disk
Before=backintime.service

[Mount]
What=/dev/disk/by-uuid/931129c7-7f15-4042-9a69-796c9eb8ffc9
Where=/media/backup
Run Code Online (Sandbox Code Playgroud)

但是我如何自动执行它?

bru*_*tra 4

我正在努力实施一个非常相似的系统。我让它工作了,但我仍然想调整这个和那个(请参阅这个更一般的问题:systemd - umount device after service,这取决于它完成)。

这是解决您问题的有效解决方案:

备份服务

[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>
Run Code Online (Sandbox Code Playgroud)

注意:要获取存储设备单元的列表,请使用systemctl list-units --all --full | grep disk

您可能还想在 [Unit] 下添加RefuseManualStart =yes。

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>
Run Code Online (Sandbox Code Playgroud)

您已经差不多到这里了,现在要自动启动backup.service,我们将使用udev 规则

在这里,您可能还想在 [Unit] 下添加 RefuseManualStart=yes。

90-备份.规则

KERNEL=="sd*", ATTRS{serial}=="<HD SERIAL HERE>", TAG+="systemd", ENV{SYSTEMD_WANTS}+="backup.service"  
Run Code Online (Sandbox Code Playgroud)

注意:要获取特定设备的属性列表(包括其序列号),请使用udevadm info -a -n /dev/sd*