cronjob nur einmal ausführen

Status
Not open for further replies.

ottto

Explorer
Joined
Sep 2, 2013
Messages
83
FreeNAS 9.3

Hallo zusammen,
ich hab mir, zur Datensicherung, einen Cron-Job eingerichtet, welcher zum Teil mehrere Stunden läuft.
Wie kann man verhindern, dass dieser doppelt ausgeführt wird, falls dieser noch nicht fertig ist und laut Zeitplan schon wieder los rennen soll?

Danke.
Gruß.
ottto
 

ObiTobi

Patron
Joined
Jul 12, 2013
Messages
316
An sich ist das doch recht einfach zu lösen.

1. Prüfen ob Datei da
2. Wenn ja dann Ende
Wenn Nein, dann Datei anlegen und weiter im Skript
3. Datei löschen

Gesendet von meinem SM-G920F mit Tapatalk
 

ottto

Explorer
Joined
Sep 2, 2013
Messages
83
Der Nachteil bei Deiner Lösung wäre, dass wenn der Job abgebrochen wird, die Datei bestehen bleibt und der Job nicht wieder aufgerufen werden kann.
Im I-Net hab ich einen Lösung gefunden, bei der der Zugriff auf eine def. Datei gesperrt wird solange das Script läuft.
Und ein "Folgescript" vorzeitig beendet wird, wenn die Datei noch gelockt ist.
Das funktioniert mit flock. Den Befehl kann ich in meinem FreeNAS-System nicht finden.
Kann man sich den Befehl einfach von einem bestehenden System (Ubuntu) holen? Oder ist da mit Problemen zu rechnen?

Danke.
Gruß.
ottto
 

ObiTobi

Patron
Joined
Jul 12, 2013
Messages
316
Ubuntu != FreeBSD

Bei meiner Lösung kannst du z.B noch einem weiterem Cronjob erstellen der prüft ob die Datei vorhanden ist und ob dein erster Job läuft. Ist es nicht der Fall- Datei löschen.
Oder es eben alles in einem Skript packen.

Gesendet von meinem SM-G920F mit Tapatalk
 

ottto

Explorer
Joined
Sep 2, 2013
Messages
83
Datei erstellen und abfragen ob vorhanden, bekomme ich hin.
Kannst Du mir noch einen Tipp geben, wie man fragt ob der Job noch läuft?
Danke.
Gruß.
ottto
 

ObiTobi

Patron
Joined
Jul 12, 2013
Messages
316
Na dein Job wird irgendein Executable ausführen
So spontan

if pgrep Name > /dev/null; then
echo "Name läuft "
else
echo "Name nicht läuft"
fi

Gesendet von meinem SM-G920F mit Tapatalk
 

zoomzoom

Guru
Joined
Sep 6, 2015
Messages
677
If you are using rsync , you can use the restartable parameter.
 

zoomzoom

Guru
Joined
Sep 6, 2015
Messages
677
--partial or -P (equivalent to --partial --progress)

See rysnc man page or in a terminal: man rsync

This is the script I use to backup my pools to a backup pool:
Code:
#!/bin/bash

        ##::[[-----> FreeNAS Rsync Backup <-----]]::##


#---------------------------------------
            # Variables #
#---------------------------------------


    # Date & Time:
#--------------------

  dt=$(date '+%Y.%m.%d_%H:%M:%S')


    # DataStores:
#--------------------

# Backups:
  bak=backup-1

# Logging:
  ssd=nas-ssd

# Storage:
  data=nas-storage

# System:
  sys=nas-system


    # Directories:
#--------------------

# Backup:
  ext11=/mnt/$bak/$data/
  ext12=/mnt/$bak/$sys/

# Data
  zp1=/mnt/$data/
  zp2=/mnt/$sys/

# Logs:
  logs=/mnt/$ssd/logs/rsync


    # Logging:
#--------------------

# Backup:
  logB1=--log-file=$logs/backup/BACKUP_$data-$dt.log
  logB2=--log-file=$logs/backup/BACKUP_$sys-$dt.log

# Restore:
  logR1=--log-file=$logs/restore/RESTORE_$data-$dt.log
  logR2=--log-file=$logs/restore/RESTORE_$sys-$dt.log


# Options:
  opt="-avrt --human-readable --partial --stats --info=name0"


# Backup:
  BackSt="rsync $opt $logB1 $zp1 $ext11"
  BackSy="rsync $opt $logB2 $zp2 $ext12"

# Restore:
  RestSt="rsync $opt $logR1 $ext11 $zp1"
  RestSy="rsync $opt $logR2 $ext12 $zp2"



#---------------------------------------
               # Rsync #
#---------------------------------------


    # Backup:
#--------------------

# Storage:
  printf "\n\n...Backing up NAS-Storage to Backup-1...\n\n"
  $BackSt

# System:
  printf "\n\n...Backing up NAS-System to Backup-1...\n\n"
  $BackSy


    # Restore:
#--------------------
  
# Storage:
  #printf "\n\n...Restoring NAS-Storage from Backup-1...\n\n"
  #$RestSt

# System:
  #printf "\n\n...Restoring NAS-System from Backup-1...\n\n"
  #$RestSy
  • Double check the commands in the code output against the rsync man linked to earlier, as translate altered the post on my end, adding whitespaces everywhere and capitalizing letters.
 
Last edited:
Status
Not open for further replies.
Top