Bash: Lock Datei

0

Laufen Scripte automatisiert per cron job, ist darauf zu achten, dass diese nicht zweimal gestartet werden können. Situationen, in denen dieses Verhalten auftauchen kann, sind

  • Script läuft aufgrund von Systemlast länger als üblich,
  • Cron-Zeitfenster sind zu knapp hintereinander,
  • Script ist aufgrund eines Fehlers stehen geblieben.

Um eine bereits laufende Instanz eines Scripts zu markieren, bietet sich die Verwendung von lock-Dateien an. Nachfolgend möchte ich dafür eine Funktionen vorstellen, die die Verwendung von Lock-Dateien vereinfachen.

Die Function create_lockfile() erstellt ein Lockfile im Pfad des Scriptes mit der Endung .lock. Sollte dort bereits eine entsprechende Datei vorhanden sein, so beendet die Funktion das Script mit einer entsprechenden Meldung und gibt die process id des bereits laufenden scriptes aus.
Innerhalb der Funktion wird darüber hinaus eine trap definiert. Diese sorgt dafür, dass das Lockfile auch dann gelöscht wird, wenn das Script abgebrochen wird, oder es aufgrund eines Fehlers beendet wird.

function create_lockfile() {
  #######################################
  # Create lock file to avoid starting a script twice.
  # If lock file already exists script quits
  # Arguments:  None
  # Returns:    None
  #######################################

  declare lockfile=$(realpath $0).lock

  if [[ -e "${lockfile}" ]]; then
    ps_script=$(ps aux |grep $0)
    set -- ${ps_script}
    echo "Script $(realpath "${0}") ("${2}") is already running."
    exit 0
  fi

  touch "${lockfile}"
  trap "rm -f ${lockfile}; exit" INT TERM EXIT
}

Die Ausgabe bei doppelter Ausführung sieht dann wiefolgt aus.

$ ./test.sh
Script /tmp/test.sh (22418) is already running.

 

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

Antworten