Es sieht so aus, als ob die Ausführung des Befehls länger als eine Minute dauert. Die Befehle häufen sich also, bis auf Ihrem System die Ressourcen ausgehen.
Sie können sicherstellen, dass nur eine Instanz davon ausgeführt wird, rsync
indem Sie eine Sperrdatei verwenden. util-linux
Beinhaltet einen Dateisperr-Wrapper namens flock
, den Sie in Ihrer Crontab folgendermaßen verwenden können:
* * * * * /usr/bin/flock -n '/tmp/example.lock' -c 'rsync -azP /local_path user@x.x.x.x:/remote_path' > /dev/null
Im obigen Beispiel lautet der Pfad der Sperrdatei /tmp/example.lock
, Sie können ihn jedoch auf einen beliebigen sinnvollen Pfad festlegen. -n
verhindert, dass sich flock
Befehle häufen, da sie sofort beendet werden, anstatt darauf zu warten, dass die Sperre aufgehoben wird, um fortzufahren.
Alternativ können Sie auch verhindern, dass sich Ihr Cron-Befehl aufhäuft, indem Sie ein Skript mit einer relativ einfachen Sperre erstellen, die sicherstellt, dass immer nur eine Instanz des Skripts ausgeführt werden kann:
#!/bin/bash
PIDFILE=/tmp/example.pid
if [ -f "$PIDFILE" ]
then
PID="$(cat "$PIDFILE")"
ps -p $PID > /dev/zero 2>&1
if [ $? -eq 0 ]
then
echo "Instance of this script is still running as PID $PID"
exit 1
fi
fi
echo $$ > $PIDFILE
if [ $? -ne 0 ]
then
echo "Could not create PID file: $PIDFILE"
exit 1
fi
# YOUR CODE GOES BELOW
rsync -az /local_path user@x.x.x.x:/remote_path
# YOUR CODE GOES ABOVE
rm -f "$PIDFILE"
Sperrmechanismus inspiriert durch Verhindern von doppelten Cron-Job-Ausführungen von Benjamin Cane
Beachten Sie, dass das Skript fälschlicherweise beendet wird, wenn die PID-Datei aus irgendeinem Grund nicht entfernt wird und ein anderer Prozess dieselbe PID hat.
Speichern Sie dieses Skript irgendwo, wie in /usr/local/bin/example.sh
, chmod +x /usr/local/bin/example.sh
und nennen es dann von Ihrem crontab wie folgt aus :
* * * * * /usr/local/bin/example.sh > /dev/null