我想在将外部 USB 硬盘连接到笔记本电脑时自动将目录及其内容复制到其中。
00-usb-backup.rules
因此,我创建了一个名为的文件,/etc/udev/rules.d
其内容如下:
ACTION=="add", ATTRS{idVendor}=="0480", ATTRS{idProduct}=="a208", RUN+="/home/fabio/bin/backup"
该backup
脚本具有作为程序运行的权限。其内容为:
#! /bin/bash
cp -r /home/fabio/Ads/ /media/fabio/BACKUP/teste/
根据另一个主题的答案,我visudo
在最后一行编辑并添加了以下内容:
fabio ALL=(ALL) NOPASSWD: /home/fabio/bin/backup
但是当我连接 USB 硬盘时什么也没有发生。:(
对于可能出现什么问题您有什么想法吗?
谢谢!
答案1
插入 USB 驱动器时执行脚本。
RUN{type}:
这只能用于运行时间非常短的前台任务。长时间运行事件进程可能会阻止此设备或从属设备的所有后续事件。启动守护进程或其他长时间运行的进程不适合 udev;分叉进程(无论是否分离)将在事件处理完成后无条件终止。请注意,由于在 systemd-udevd.service 上强制实施的默认沙盒,udev 规则内不允许运行访问网络或挂载/卸载文件系统的程序。
/etc/udev/rules.d/90-usb-backup.rules:
ACTION=="add", SUBSYSTEM=="block", \
ATTRS{idVendor}=="0480", ATTRS{idProduct}=="a208", \
ENV{DEVTYPE}=="partition", RUN+="/bin/sh -c '/home/fabio/bin/backup.sh'"
/home/fabio/bin/backup.sh:(
确保您的脚本已设置执行位;chmod +x 脚本)
#!bin/bash
if [[ -b $DEVNAME ]] && \
mount $DEVNAME /home/fabio/Ads/
then
cp -a /home/fabio/Ads/ /media/fabio/BACKUP/teste/
fi
这不会将驱动器安装到系统上,而只会在沙箱。
答案2
这是我所做的:根据热插拔事件,udev 规则触发 systemd 服务(例如 borgmatic.service)。
SUBSYSTEM=="block", ACTION=="add", ENV{DEVTYPE}=="partition", TAG+="systemd", ENV{SYSTEMD_USER_WANTS}="borgmatic.service"
对于我的 ~/.config/systemd/user 文件夹中的服务
[单元] 描述=/home 备份
[服务]
类型=oneshot
ExecStart=/home/xxx/.local/bin/borgmatic