Seltsamer Fehler in simplem rsync-Script

Bash, Shell, PHP, Python, Perl, CGI
neo2001
Posts: 40
Joined: 2002-09-12 19:04
Location: Bad Herrenalb

Seltsamer Fehler in simplem rsync-Script

Post by neo2001 » 2011-03-15 13:39

Folgendes sehr einfaches Script läuft seit mehreren Monaten, eher Jahren, einwandfrei (wird per crontab 1x am Tag gestartet):

Code: Select all

#!/bin/sh
RSYNC_IS_RUNNING=`ps -ef | grep -v grep | grep -ic rsync`
#echo $RSYNC_IS_RUNNING
if [ $RSYNC_IS_RUNNING = 0 ]
  then
    rsync -vaz --delete --force --bwlimit=800 --exclude=.* --partial -e "ssh -pxxxxx" /xxx/xxxx/ xxxxx@xxxxx.xxxxxxx.xx:/xxx/xxxx > /dev/null
fi

Nun tut es plötzlich nicht mehr - sprich rsync läuft offenbar nicht mehr.

Nach ein wenig herumprobieren, hab ich schnell herausgefunden, dass der Wert von RSYNC_IS_RUNNING nicht "0" sondern "3" ist (an der Stelle des auskommentierten echos). Logisch also, dass er den Block mit dem rsync-Kommando gar nicht erst betritt.

Führe ich den Befehl in den Backticks aber direkt auf der Shell aus (als root, Script läuft ebenfalls als root) erhalte ich wie erwartet "0" und nicht "3".

Dachte erst an ein Problem mit den Backticks (falsches Zeichen o.ä.) - aber in anderen Scripts funktionieren die auf der gleichen Maschine einwandfrei. Zudem ein

Code: Select all

RSYNC_IS_RUNNING=$(ps -ef | grep -v grep | grep -ic rsync)
an dieser Stelle zum gleichen Ergebnis kommt.

Was übersehe ich hier? Was könnte ich noch ausprobieren?

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Seltsamer Fehler in simplem rsync-Script

Post by Roger Wilco » 2011-03-15 17:22

Setze als zweite Zeile in deinem Skript `set -x`. Dann siehst du wenigstens, wie deine Shell die Variablen expandiert. Explizit /bin/bash zu setzen ist sicherlich auch nicht verkehrt (falls du Bash-spezifische Features einsetzt).

Ansonsten hat ein simples `pgrep rsync` sicherlich die gleiche Wirkung, wie deine Befehlskette für RSYNC_IS_RUNNING.