Schlaubi Geschrieben 29. Mai 2002 Teilen Geschrieben 29. Mai 2002 Hoi, ich möchte gerne einem Shellscript eine Prozedur hinzufügen, die die Verhinderung einer gleichzeitigen Ausführung abschaltet. Auf deutsch: Ich will per Variable einstellen können, ob das Programm (Shellscript) nur einmal laufen darf oder auch öfters. Ich dachte mir dass ich das Problem mit dem "spezialvariablen $$", die die PID des aktuellen Prozesses wiedergeben, lösen kann. Jedoch komm ich nicht weiter Für Hilfe wäre ich dankbar!! Hier mal ein Beispielcode, wie ich mir das ungefähr vorstelle: (nur mal so hingerotzt) # concurrent execution exe=0 # ""|0: no concurrent execution if test -z "$exe"; then exe=0; fi #$progname could be only 1 time executed # 1: concurrent execution on if test "$exe" -gt 0; then concurentexe; fi if test "$exe" -gt 0; then tmpext=$$; else tmpext=tmp; fi tmpfile=${TMP:-/tmp}/${progname%%.*}.$tmpext concurrentexe () { if test "$tmpfile" = "$tmpfile"; then echo "concurrent execution: Sorry, $progname is processing, please wait..." fi } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sumpfbiber Geschrieben 29. Mai 2002 Teilen Geschrieben 29. Mai 2002 Hi, $$ ist ja die ID des gerade laufenden Prozess. Uberpruef einfach ob die ID in der Prozessliste enthalten ist z.B. ps -ef | grep "prozessname | grep -v grep | awk '{print $2}' Mit diesem Kommando suchst du den Prozess und gibst , falls er vorhanden ist die ID aus. Dann noch schnell $$ und die ID vergleichen und schon hast du die Abfrage... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sumpfbiber Geschrieben 29. Mai 2002 Teilen Geschrieben 29. Mai 2002 ausserdem wuerd ich in das TMPFILE noch $$ miteinbauen, damit es eindeutig ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 29. Mai 2002 Autor Teilen Geschrieben 29. Mai 2002 gut ich werds mal versuchen, wenns nicht klappt meld ich mich wieder ;-) dank dir! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 31. Mai 2002 Autor Teilen Geschrieben 31. Mai 2002 also ich hab hier erstmal eine Prozedur erstellt, die eine gleichzeitige Ausführung verhindert... (um diese Prozedur zu verhindern benötige ich eine andere....ich bleib dran) code: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LockExec () { test -z "$conffile" -o ! -f "$conffile" && return 0 pidfile="$conffile.$$" echo $$ >$pidfile ln $pidfile $conffile.lock 2>/dev/null && return 0 CritError "already running as pid '$(<$conffile.lock)'." } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ so long, Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.