Guten Abend, ich habe habe leider ein kleines aber feines Problem mit meinem Script. Im Grunde läuft es, aber im Grunde auch nicht. Das Problem an der Sache ist die HDD Abfrage bzw. der Inhalt der Schleife. ich möchte, dass das Script im Hintergrund läuft und sobald die USB Platte mit der passenden Kennung eingeschalten wird, soll via rsync ein backup erfolgen. Wenn ich das Script starte sobald die HDD angeschalten ist, dann läuft es auch durch, da er das passende Laufwerk mit der passenden Partition findet. Starte ich zuerst das Script und schalte dann die HDD an, dann bleibt das script bei der HDD abfrage hängen. Wenn das Script nach dem HDD start gestartet wurde, prüft er ob die UUID mit der Partiiton übereinstimmt. In diesem Fall auf /dev/sde1 (UUID b2e5fd9d-ed14-465c-8ced-314e6d6b384f). Starte ich das Script vor dem Start der HDD, dann prüft er die UUID (b2e5fd9d-ed14-465c-8ced-314e6d6b384f) bei /dev/disk/by-uuid/0CD6AAFFD6AAE7E2 und das ist der Knackpunkt. Die Variable /usr/bin/readlink -f /dev/disk/by-uuid/$HDDUUID wird nicht neu geprüft sondern bleibt immer gleich. Ich kann auch nicht sagen, dass es immer /dev/sde ist, da sich ja manchmal die Laufwerksbuchstaben auch verschieben. Deswegen ja die Abfrage via readlink und der Vergleich mit der UUID. Vielleicht hat ja jemand anderes eine Lösung. Via systemd ist leider keine Lösung.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin #backup harddrive variables UUID=b2e5fd9d-ed14-465c-8ced-314e6d6b384f HDDUUID=0CD6AAFFD6AAE7E2 PIDFILE=/opt/var/run/AutoSyncVideo.pid BACKUPDIR=/media/usb/ TOBACKUP="/mnt/md1/Video /mnt/md1/DvD" PARTITION=`/usr/bin/readlink -f /dev/disk/by-uuid/$HDDUUID` SLEEPTIME=30 LOGFILE=/opt/root/rsynclog.log Background() { [ -f $PIDFILE ] && [ -f /proc/` cat $PIDFILE `/cmdline ] && echo "$0 is already running" && exit 1 echo $$ >$PIDFILE trap "rm -f $PIDFILE ; exit 0" INT TERM EXIT echo 'Starte Script' >> $LOGFILE while : do echo 'Starte schleife' >> $LOGFILE echo -e "/sbin/blkid | grep -s $PARTITION | grep -c $UUID" >> $LOGFILE echo -e "$PARTITION $UUID" >> $LOGFILE if [ `/sbin/blkid | grep -s $PARTITION | grep -c "$UUID"` -eq 1 ]; then echo 'Starte rsync' >> $LOGFILE FLAG='1' echo -e "$FLAG" >> $LOGFILE if [ $FLAG = 1 ]; then #check if drive mounted if grep -qs $PARTITION /proc/mounts; then #its already mounted MOUNTED='1' echo 'Drive already mounted' >> $LOGFILE BACKUPDIR=`grep $PARTITION /proc/mounts | awk '{ print $2 }'` echo 'Directory: ' $BACKUPDIR >> $LOGFILE else #not mounted MOUNTED='0' echo 'Mounting drive' >> $LOGFILE sudo mkdir -p "$BACKUPDIR" sudo mount /dev/disk/by-uuid/$UUID "$BACKUPDIR" echo 'Mounted: ' $BACKUPDIR >> $LOGFILE fi #perform home backup rsync -au --delete $TOBACKUP $BACKUPDIR #clean up if [ $MOUNTED = 0 ]; then #unmount and remove dir echo 'Unmounting drive' >> $LOGFILE sudo umount "$PARTITION" sudo rmdir "$BACKUPDIR" else echo 'Leaving drive mounted' >> $LOGFILE fi echo 'Backup Complete!' >> $LOGFILE exit fi else echo -e "schlafe $SLEEPTIME Sekunden" >> $LOGFILE sleep $SLEEPTIME fi done } case $1 in start) $0 background & echo "Starting Autobackup Video..." ;; stop) kill -9 ` cat $PIDFILE ` echo "Stopping Autobackup Video ` cat $PIDFILE ` " rm -f $PIDFILE ;; status) [ -f $PIDFILE ] && [ -f /proc/` cat $PIDFILE `/cmdline ] && echo "running as ` cat $PIDFILE ` " && exit 0 echo "not running" ;; background) Background ;; *) echo "use $0 [ start | stop | status ]" ;; esac |