使用 USB 设备运行脚本

使用 USB 设备运行脚本

我想在将外部 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

相关内容