请问我对这个问题有一个非常基本的答案。我对linux比较陌生。
我正试图在树莓派上创建一个plex媒体服务器,供我岳父在电视上查看他的所有照片。
基本概念是我有一个带有外接硬盘和USB SD卡读卡器的RPI。插入SD卡后,它将自动将文件复制到HDD。然后,我将plex指向硬盘以拾取所有照片。
我已经在家中的rpi上构建了一个简单的NAS / plex服务器,因此可以正常运行。但是我在从SD卡自动复制文件时遇到了问题。
我之前从未做过任何脚本编写工作,因此我使用了一个名为“小备份盒”的项目作为参考,并尝试根据需要对其进行修改。如果需要参考,请在此处输入原始版本:
https://github.com/dmpop/little-backup-box/
原始脚本检测何时插入设备,然后关闭rpi。就像我想在rpi上运行plex介质服务器一样,我需要它保持打开状态。完整脚本由我在下面修改。
#!/bin/bash
# IMPORTANT:
# Run the install-little-backup-box.sh script first
# to install the required packages and configure the system.
# Specify devices and their mount points
STORAGE_DEV="sda1"
STORAGE_MOUNT_POINT="/media/storage"
CARD_DEV="sdb1"
CARD_MOUNT_POINT="/media/card"
# When the USB storage device is detected, mount it
mount /dev/$STORAGE_DEV $STORAGE_MOUNT_POINT
# Wait for a card reader or a camera
CARD_READER=$(ls /dev/* | grep $CARD_DEV | cut -d"/" -f3)
until [ ! -z $CARD_READER ]
do
sleep 1
CARD_READER=$(ls /dev/sd* | grep $CARD_DEV | cut -d"/" -f3)
done
# If the card reader is detected, mount it and obtain its UUID
if [ ! -z $CARD_READER ]; then
mount /dev/$CARD_DEV $CARD_MOUNT_POINT
# # Set the ACT LED to blink at 500ms to indicate that the card has been mounted
sudo sh -c "echo 500 > /sys/class/leds/led0/delay_on"
# Create the CARD_ID file containing a random 8-digit identifier if doesn't exist
if [ ! -f $CARD_MOUNT_POINT/CARD_ID ]; then
< /dev/urandom tr -cd 0-9 | head -c 8 > $CARD_MOUNT_POINT/CARD_ID
fi
# Read the 8-digit identifier number from the CARD_ID file on the card
# and use it as a directory name in the backup path
read -r ID < $CARD_MOUNT_POINT/CARD_ID
BACKUP_PATH=$STORAGE_MOUNT_POINT/"$ID"
# Perform backup using rsync
rsync -avh --timeout=10 $CARD_MOUNT_POINT/ $BACKUP_PATH
fi
exec $0 && exit
这在大多数情况下都可以正常工作。我可以插入一张SD卡,它将复制所有文件。
但是我遇到的问题是,我的岳父年纪大了,可能需要万无一失,并且在完成复制等操作之前可能会拔出SD卡。我还需要它才能复制另一个移除原件后,SD。
因此,我尝试修改脚本以在完成后重新启动自身。当我输入top命令时,可以看到backup.sh脚本正在运行,这似乎可以正常工作。
但是,如果通过拉出SD卡故意中断了复制,则在插入新存储卡后,它不会开始复制新文件。我认为该问题可能与rsync进程未正确终止/终止有关。
因此,我添加了--timeout = 10以尝试在未检测到IO的情况下干净地关闭rsync进程,但这似乎不起作用,因为我可以看到拉取SD后rsync继续作为进程很好地运行卡。
我不完全确定我在哪里出错,只是猜测它与rsync问题有关。因此,非常感谢任何帮助。
其他信息:运行raspbian拉伸的rpi模型3 b +。