同步后Rsync脚本不会继续

时间:2015-09-23 12:56:37

标签: linux shell backup rsync

问题:我有一个简单的自定义备份脚本,设置为在检测到备份驱动器时运行,这是通过udev完成的。一切顺利,直到大约一半的脚本,似乎在rsync命令后挂起。我的代码如下:

#!/bin/bash

#Mount the Backup Drive
wall "backup is starting"
mount -U f91b8373-6349-4de3-86e1-6a2557f2c3f7 /media/backupdrive

#Get updated package-list
mv /media/backupdrive/package-selections /media/backupdrive/package-selections.old
dpkg --get-selections >/media/backupdrive/package-selections
wall "pacakge list updated"

#Run Backup
mv /home/user/backup/rsync.log /home/user/backup/rsync.log.old
rsync --log-file=/media/backupdrive/backup/rsync.log -ravzX --delete --exclude /var/tmp --exclude /var/lock --exclude /var/run /home /etc /var /usr /media/backupdrive/backup
wall "rsync complete"

#Sync changes to disk and unmount
sync
cp /media/backupdrive/backup/rsync.log /home/user/backup/rsync.log
umount /media/backupdrive
wall "Backup is complete, the logfile can be viewed at /home/user/backup/rsync.log"

问题:我在这里做错了什么,为什么脚本在rsync之后没有继续?

PS - 墙上的命令对我把它们放在各个点进行故障排除的脚本并不重要,是的,我是新手:)

编辑 - 我已尝试删除类似问题中提到的“z”选项,但这没有任何区别

1 个答案:

答案 0 :(得分:1)

它就像udev中的RUN命令超时一样。 您可以直接从udev运行备份脚本(通常需要很长时间才能完成),而不是直接从udev运行备份脚本。

例如,您可以使用at命令:

ACTION=="add", KERNEL=="sd*", ENV{ID_FS_UUID_ENC}=="f91b8373-6349-4de3-86e1-6a2557f2c3f7", RUN+="/home/steve/backup/backup_at.sh"

backup_at.sh:

#!/bin/sh
echo /home/steve/backup/backup.sh | at now

或者您可以尝试在后台运行它:

ACTION=="add", KERNEL=="sd*", ENV{ID_FS_UUID_ENC}=="f91b8373-6349-4de3-86e1-6a2557f2c3f7", RUN+="/home/steve/backup/backup.sh &"

但我不会检查这种方法。

来自http://lists.freedesktop.org/archives/systemd-devel/2012-November/007390.html

  

从udev规则启动任何长时间运行的任务是完全错误的   而你应该期待它会被杀死。如果你需要发射一个   从udev规则处理,使用ENV {SYSTEMD_WANTS}来激活a   服务。