Shell-Skript nicht doppelt starten

Dieses Thema im Forum "SuSE / OpenSuSE" wurde erstellt von HokusPokus, 16.01.2013.

  1. #1 HokusPokus, 16.01.2013
    HokusPokus

    HokusPokus Eroberer

    Dabei seit:
    14.05.2011
    Beiträge:
    56
    Zustimmungen:
    0
    Hallo zusammen.

    Ich habe hier ein Problem mit meinem Shell-Skript, das ist seit Tagen zu lösen versuche. X( Bisher leider erfolglos.

    Ziel: Das Skript wird per cron alle zwei Stunden gestartet und soll jedes Mal prüfen, ob es vom letzten Mal noch läuft. Wenn ja: kein weiterer Start. Wenn nein: erneut starten.

    Code:
    #!/bin/bash
    ps -e | grep Backups | grep -v grep > /dev/null
    if [ $? -ne 0 ]
    then
    
      /home/user/Backup_1
      /home/user/Backup_2
      /home/user/Backup_3
      /home/user/Backup_4
    
    else
      echo "Vorheriger Prozess läuft noch - keine Backups - Exit"
    fi
    
    
    Das Problem: Wenn ich den Befehl
    Code:
    ps -e | grep Backups | grep -v grep > /dev/null
    in der Konsole eingebe und danach $? abfrage, kommt 1 als Ergebnis zurück. Somit sollte das Skript starten - tut es aber nicht...

    Weiß einer von euch Rat?

    Das Skript hat auch schon so ausgesehen:

    Code:
    #!/bin/bash
    ps -e | grep Backups | grep -v grep | awk '{ print $1 }' > /dev/null
    if [ $? -ne 0 ]
    then
    
      /home/user/Backup_1
      /home/user/Backup_2
      /home/user/Backup_3
      /home/user/Backup_4
    
    else
      echo "Vorheriger Prozess läuft noch - keine Backups - Exit"
    fi
    
    
    Bringt leider auch nichts. Hier erscheint dann immer der Fehlercode 0. Egal ob das Skript läuft oder nicht.

    Grüße.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Spröde, 17.01.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Code:
    #!/bin/bash
    
    Lockfile=/tmp/Backup_Lock
    
    if [ -f $Lockfile ]
    then
      echo "Vorheriger Prozess läuft noch - keine Backups - Exit"
      exit
    fi
    
    echo >$Lockfile
    
    /home/user/Backup_1
    /home/user/Backup_2
    /home/user/Backup_3
    /home/user/Backup_4
    
    rm $Lockfile
    
    http://de.wikipedia.org/wiki/Lock
     
  4. #3 tgruene, 17.01.2013
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Wenn Du innerhalb des Skriptes den ps-Befehl ausfuehrt, findet es ja zumindest sich selbst, egal ob eine weitere Instanz davon laeuft oder nicht. Deswegen funktioniert Dein Ansatz nicht.
    Der richtige Weg ist die lock-Datei von Sproede. Idealerweise enthaelt diese die PID des Skriptes, das sie erzeugt hat. Dann kannst Du im Skript ueberpruefen, ob neben der Datei auch der eigentliche Prozess laeuft. Wenn nicht, wurde das Skript nicht ordentlich beendet, so dass ein neuer Anlauf starten kann, der dann auch die Datei neu anlegt.
     
  5. #4 HokusPokus, 17.01.2013
    HokusPokus

    HokusPokus Eroberer

    Dabei seit:
    14.05.2011
    Beiträge:
    56
    Zustimmungen:
    0
    Vielen Dank erstmal. Ich habe das mal ins Skript übertragen und werde es dann mal ausprobieren, habe an der Vorgehensweise von euch keine Zweifel.
    Manchmal ist die Lösung zu einfach...
    Leider mache ich noch viel zu wenig in der Shell, als dass ich mich gut auskennen könnte. Da muss ich noch viel dazulernen.

    Der Ansatz von tgruene interessiert mich auch noch. Auch dem werde ich noch nachgehen. Es muss also nach der Überprüfung, ob die Datei vorhanden ist, noch geprüft werden, ob es die PID, die in der Datei steht, noch gibt. Wenn ja, läuft der Prozess noch - Abbruch. Wenn nein, wurde das Skript unsauber beendet und die Datei muss gelöscht werden. Dann läuft das Backup-Skript auch an.

    Quasi: Lock-Datei vorhanden + PID existent = Abbruch
    Lock-Datei vorhanden aber PID nicht existent = Lock-Datei löschen, neu erstellen und Backup-Skript starten
    Lock-Datei nicht vorhanden = Lock-Datei erstellen und Backup-Skript starten
     
  6. #5 karloff, 18.01.2013
    karloff

    karloff Routinier

    Dabei seit:
    09.07.2007
    Beiträge:
    317
    Zustimmungen:
    0
    Ort:
    ~/
Thema: Shell-Skript nicht doppelt starten
Besucher kamen mit folgenden Suchen
  1. unix beim starten skript mit starten

    ,
  2. wenn script noch nicht gestartet dann starten linux

    ,
  3. bashscript prüfen ob process schon vorhanden

    ,
  4. linux läuft skript
Die Seite wird geladen...

Shell-Skript nicht doppelt starten - Ähnliche Themen

  1. [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

    [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen: Hallo, ich hoffe ihr könnt mir helfen. Ich entwerfe im Moment ein Skript, welches den Callmonitor (Telnet) auf meiner FritzBox abfragt und wenn...
  2. Shell-Skript Datum in einer Datai suchen

    Shell-Skript Datum in einer Datai suchen: Hallo zusammen Ich komm eigentlich aus der Klicki-Bunti-Welt von Windows. Seit geraumer Zeit versuche ich meine Künste mit verschiedenen...
  3. Artikel: Shell-Skripte - Kleine Helfer selbst gemacht

    Artikel: Shell-Skripte - Kleine Helfer selbst gemacht: Mit Shell-Skripten sind kleine Helfer schnell selbst geschrieben. Sie haben den Vorteil, dass man sich keine langen Befehlszeilen auswendig merken...
  4. Hilfe bei einfachem Shell-Skript

    Hilfe bei einfachem Shell-Skript: Hallo, Ich bin auf der Suche nach jemandem der mir ein recht einfaches Shellskript gegen kleine Bezahlung erstellen könnte. Bei Interesse...
  5. Shell-Skriptum erstellen ( Anfänger der Stufe 0 )

    Shell-Skriptum erstellen ( Anfänger der Stufe 0 ): Hallo erstmals . Seit kurzen arbeiten wir an der Uni mit UNIX und schon hagelt es von Aufgaben . Aufgabenstellung : | |-- WS2003a |...