rsync 出錯時不回傳

rsync 出錯時不回傳

我正在從 udev 規則運行備份腳本。該腳本在 rsync 的幫助下裝載資料並將其複製到新連接的 USB 隨身碟。

# Mounting stuff

MOUNTPOINT=/media/backup
export OUTPUT=/tmp/rsync-output.log

# -a does not work on exFAT partitions, because of permissions, groups, owner. Use -rltD instead of -rlptgoD, which -a would imply.
rsync -rltDv --exclude '*.app' --exclude-from=/home/gauthier/rsync-exclude.txt /home/gauthier/ $MOUNTPOINT/gauthier/ > $OUTPUT 2>&1

touch /home/gauthier/tmp/I_came_here

rsync確實開始,如下所示/tmp/rsync-output.log

gauthier@ionian:~/tmp $ tail /tmp/rsync-output.log
rsync: symlink "/media/backup/gauthier/code/wine64/loader/wine" -> "/home/sandbox/wine3264/loader/wine" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/loader/wine-preloader" -> "/home/sandbox/wine3264/loader/wine-preloader" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/po/LINGUAS" -> "../../wine/po/LINGUAS" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/tools/l_intl.nls" -> "../../wine/tools/l_intl.nls" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/tools/winegcc/winecpp" -> "winegcc" failed: Function not implemented (38)
rsync: symlink "/media/backup/gauthier/code/wine64/tools/winegcc/wineg++" -> "winegcc" failed: Function not implemented (38)

sent 30,239,649,237 bytes  received 237,923 bytes  18,123,995.90 bytes/sec
total size is 206,189,220,918  speedup is 6.82
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]

/home/gauthier/tmp/I_came_here但應該創建的文件touch不存在。之後還有其他的東西touch,似乎也沒有被執行。

rsync儘管有錯誤,是否不應該返回?是什麼讓它無法返回?

我嘗試從 bash 提示符運行腳本(而不是讓 udev 規則運行它),然後它似乎會在rsync.


完整腳本:

#!/bin/bash
#export DISPLAY=:0
export XAUTHORITY=~/.Xauthority

xmessage -buttons abort -default abort -center -timeout 10 "Starting backup. Press enter to abort."
ANSWER=$?

if [ $ANSWER -eq 101 ] ; then
    xmessage -timeout 3 "Aborted!"
    exit
fi

if [[ ! -L /dev/backup_external_hd ]] ; then
    xmessage "External disk not present at /dev/backup_external_hd, aborting backup."
    exit
fi

MOUNTPOINT=/media/backup

sudo mkdir -p $MOUNTPOINT
sudo mount /dev/backup_external_hd $MOUNTPOINT

if ! grep "$MOUNTPOINT" /proc/mounts ; then
    xmessage "Failed to mount $MOUNTPOINT!"
    rmdir $MOUNTPOINT
    exit
fi

export OUTPUT=/tmp/rsync-output.log

# -a does not work on exFAT partitions, because of permissions, groups, owner. Use -rltD instead of -rlptgoD, which -a would imply.
rsync -rltDv --exclude '*.app' --exclude-from=/home/gauthier/rsync-exclude.txt /home/gauthier/ $MOUNTPOINT/gauthier/ > $OUTPUT 2>&1

touch /home/gauthier/tmp/I_came_here
xmessage "AAAAyyye"

# Pop up a result window
# Get a summary
export RESULT_MESSAGE=/tmp/rsync-result.txt
echo "Backup result:" > $RESULT_MESSAGE
echo "" >> $RESULT_MESSAGE    # \n does not seem to work in echo strings
tail -3 $OUTPUT >> $RESULT_MESSAGE
echo "" >> $RESULT_MESSAGE
echo "" >> $RESULT_MESSAGE
echo "Details in $OUTPUT" >> $RESULT_MESSAGE
xmessage -file $RESULT_MESSAGE

# Apparently unmounting too fast after writing could be a problem.
sleep 1

sudo umount $MOUNTPOINT

if grep "$MOUNTPOINT" /proc/mounts ; then
    xmessage "Could not unmount $MOUNTPOINT."
    exit
fi

sudo rmdir $MOUNTPOINT

相關內容