如何编写 shell 脚本在每次插入外部 SSD 时执行 rsync?

如何编写 shell 脚本在每次插入外部 SSD 时执行 rsync?

我想执行 rsync 命令,将本地目录与外部 SSD 同步。我按照中给出的说明进行操作这个链接。根据 udev 规则执行一些命令。这显示了如何根据 idVendor 和 idProduct 对特定 USB 驱动器运行命令。这是我的命令/etc/udev/rules.d/test.rules:

ATTRS{idVendor}=="0781", ATTRS{idProduct}=="558c", RUN+="/temp/auto_back.sh"

/tmp/auto_back.sh刚刚有

#!/bin/bash

# auto backup command 

rsync -avzh /home/abhishek/Dropbox /media/abhishek/Hachiko

我对此没有太多的见解。我只是觉得这可能有用。但事实并非如此。我读到有时该命令会在安装驱动器之前执行。你能给我一些关于我做错了什么以及这件事是如何运作的见解吗?另外,有没有办法让脚本中的命令在执行之前等待一段时间?

答案1

仅当您传递正确的信息(例如,对于 usb)时,udev 才会工作,

KERNEL=="sd*", ATTRS{vendor}=="<Vendor name>", ATTRS{model}=="<Model>", ATTRS{serial}=="<serial>", RUN+="/your script path"

或者,

由于不确定硬件类型和其他细节,我无法编写完整的代码,但是请检查此逻辑并放入定时任务要么使用长时间运行的进程,要么继续检查日志。新硬件应该在 dmesg 输出中可见。

if "string matching in dmesg" && "within 30s"; then 
     check disk is properly mounted
     check disk is writable
     start backup
fi

在开始备份之前,检查磁盘的逻辑是否可写并正确安装。

答案2

您可以添加等待磁盘安装的时间

例如:

while ! [ -w /media/abhishek/Hachiko ]
do sleep 1
done

但这要求您在插入驱动器时登录 GUI,最好覆盖自动安装并显式安装驱动器。

相关内容