2016-11-21 2 views
0

Ich verwende den SpiderOak-Client, um meine NAS-Serverdaten in der Cloud zu sichern. Seit Monaten funktioniert das gut. Heute jedoch, nachdem er eine Weile gelaufen war, blieb der Cronjob-Prozess in einem Schlafzustand stecken. Ich brauche Hilfe herauszufinden, warum und wie zu behebenLinux-Bash-Skript im Ruhezustand stecken

Ich verlor vor kurzem das Cronjob-Skript, das gut funktioniert hatte, so dass ich ein neues Bash-Skript schreiben musste. Vielleicht habe ich einen Fehler gemacht. Hier ist sie:

#!/bin/sh 
WORKING_FILE=/volume1/Volume_1/spideroak.lock 
RESULT_FILE=/volume1/Volume_1/spideroak.log 

# Cancel if there is an ongoing backup 
if [ -f "$WORKING_FILE" ] 
    then 
    echo "Error: $WORKING_FILE already exists; backup is already running." 
    exit 1; 
    fi 

# Run backup and save results to file with the name that gets checked above 
/opt/SpiderOakONE/usr/bin/SpiderOakONE --batchmode --verbose --redirect="$WORKING_FILE" 

# Rename log once backup is complete 
mv "$WORKING_FILE" "$RESULT_FILE" 

# Set log file permissions and exit 
chmod 644 "$RESULT_FILE" 
echo "Backup complete. Result saved to $RESULT_FILE" 

ich vor kurzem auch die Firmware des NAS aktualisiert, weiß aber nicht, ob das eine Rolle, indem sie langfristige Prozesse schlafen spielen konnte. Wenn ich den Backup-Befehl durch etwas ersetze, das nur ein paar Sekunden dauert, funktioniert alles. zB: wenn ich --batchmode --verbose durch --selection ersetze und alles andere so lassen wie es ist.

Der NAS ist ein Synology DS-216 + läuft DSM 6.0.2-8451 Update 4 Firmware

+0

Die Existenz einer einfachen Datei als Prozesssperre ist wahrscheinlich eine schlechte Idee. Wenn zu irgendeinem Zeitpunkt Ihr Cron-Job beendet wurde oder der NAS neu gestartet wurde, während er ausgeführt wird, wird die .lock-Datei nicht entfernt und in den permanenten Zustand "bereits ausgeführt" versetzt. Erwägen Sie stattdessen, etwas wie ['flock'] (https://linux.die.net/man/1/flock) zum Sperren zu verwenden. –

+0

Überprüfen Sie nicht das Vorhandensein einer Datei, sondern prüfen Sie, ob der Prozess vorhanden ist. Speichern Sie bei Bedarf die Prozess-ID in einer Datei und überprüfen Sie anhand der gespeicherten Prozess-ID, ob der Prozess vorhanden ist. – alvits

Antwort

0

Nicht unbedingt eine Antwort (obwohl es eine kleine Chance, dass es die Antwort sein kann), würde ich Ihnen empfehlen, die Lage des „WORKING_FILE zu ändern "to/tmp - Dieser Ordner wird bei jedem Start gelöscht (überprüfe die Linux-Distribution, stelle sicher, dass dies dein Standard ist), und er löscht die Steuerdatei, selbst wenn das Skript dies nicht schafft.