[Gelöst]]Hilfe bei Skript mit Prozessen.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Milbret
Beiträge: 827
Registriert: 26.05.2008 12:04:54
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Nörten-Hardenberg
Kontaktdaten:

[Gelöst]]Hilfe bei Skript mit Prozessen.

Beitrag von Milbret » 25.05.2010 08:30:33

Hallo,
ich benötige ein kleines Skript um ein Problem zu lösen.
Leider bin ich im Scripting noch nicht tief drin und benötige deshalb Hilfe bei folgendem Problem.

Problem:
Ich brauche ein Skript was per ps prüft ob das Programm x läuft.
Dabei muss die Ausgabe von ps -aux geprüft werden ob sie per grep zwar den gesuchten Aufruf aber nicht den grep Aufruf enthält.
Dies bräuchte ich für ein kleines Programm, dass ich per Skript starten möchte was aber nur einmal und nicht mehrmal gestartet werden soll.
Dies soll auf scripting Ebene verhindern, dass man das Programm mehrmals hintereinander starten kann solange eine Instanz läuft.

Ich hatte auch schon daran gedacht, dass ich vielleicht mit einer art Prozess ID Datei arbeite.
Somit könnte ich beim starten auch so prüfen ob das Programm läuft.
Dies ist aber zu viel Aufwand mit zu viele Problemen verbunden.

Martin
Zuletzt geändert von Milbret am 25.05.2010 10:09:51, insgesamt 1-mal geändert.
Es gibt keine if Schleife -> http://www.if-schleife.de/
Ansonsten GPL/GNU/Linux/Debian/Free Software 4 Ever :D

Benutzeravatar
Meillo
Moderator
Beiträge: 9253
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Hilfe bei Skript mit Prozessen.

Beitrag von Meillo » 25.05.2010 08:35:50

Milbret hat geschrieben: Problem:
Ich brauche ein Skript was per ps prüft ob das Programm x läuft.
Dabei muss die Ausgabe von ps -aux geprüft werden ob sie per grep zwar den gesuchten Aufruf aber nicht den grep Aufruf enthält.
Sowas kannst du erreichen indem du mit grep nach einer RegExp suchst die Metazeichen enthält die den Sinn nicht verändern. Dann passt die RegExp immer noch auf den gesuchten String aber nicht mehr auf sich selbst.

Mit diesen Informationen oder einer Websuche solltest du dieses gängige Problem in den Griff bekommen.

Ob das aber der beste Weg ist um dein eigentliches Problem zu lösen ist eine andere Frage.
Use ed once in a while!

Milbret
Beiträge: 827
Registriert: 26.05.2008 12:04:54
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Nörten-Hardenberg
Kontaktdaten:

Re: Hilfe bei Skript mit Prozessen.

Beitrag von Milbret » 25.05.2010 08:59:02

Hallo Meillo,
danke für den Hinweis.
Ich werde es mal testen.

Gibt es vielleicht eine bessere Lösung?
Das Scriptig hat dann eben den Nachteil, dass ich es für jede Plattform umsetzen muss.

Deshalb wäre eine Lösung in der Programmierung des Programms eben besser.
Aber die Lösung mit einer pid Datei wäre eben auch mit Nachteilen behaftet.
Oder ich muss dann entsprechende Hinweise aus geben wenn eine Datei vorhanden ist.
Dies wäre dann zwar für den Benutzer etwas umständlich aber trotzdem eine brauchbare Lösung.

Martin
Es gibt keine if Schleife -> http://www.if-schleife.de/
Ansonsten GPL/GNU/Linux/Debian/Free Software 4 Ever :D

Benutzeravatar
Meillo
Moderator
Beiträge: 9253
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Hilfe bei Skript mit Prozessen.

Beitrag von Meillo » 25.05.2010 09:08:29

Milbret hat geschrieben: Gibt es vielleicht eine bessere Lösung?
Das Scriptig hat dann eben den Nachteil, dass ich es für jede Plattform umsetzen muss.

Deshalb wäre eine Lösung in der Programmierung des Programms eben besser.
Aber die Lösung mit einer pid Datei wäre eben auch mit Nachteilen behaftet.
Oder ich muss dann entsprechende Hinweise aus geben wenn eine Datei vorhanden ist.
Dies wäre dann zwar für den Benutzer etwas umständlich aber trotzdem eine brauchbare Lösung.
Ich kenne mich auf dem Gebiet nicht gut aus, sehe nur, dass es unschön ist. (Es mag auch andere Prozesse mit gleichem Namen geben.)

Es wird schon jemand anderen hier geben der dieses Problem auch schon hatte und dir weiterhelfen kann.
Use ed once in a while!

michaels
Beiträge: 1164
Registriert: 29.03.2009 18:12:25

Re: Hilfe bei Skript mit Prozessen.

Beitrag von michaels » 25.05.2010 09:24:21

Habe mit so etwas auch keine Erfahrung...aber die meisten Programm legen doch in einer Datei ihre PID ab. Ist das bei dem Programm auch der Fall? Dann könntest du einfach prüfen, ob die Datei existiert oder nicht (so machen das die meisten Skript ja auch).

Gruß

Benutzeravatar
Meillo
Moderator
Beiträge: 9253
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Hilfe bei Skript mit Prozessen.

Beitrag von Meillo » 25.05.2010 09:26:39

michaels hat geschrieben:Habe mit so etwas auch keine Erfahrung...aber die meisten Programm legen doch in einer Datei ihre PID ab.
Wenn du ``Daemonen'' sagst, dann gebe ich dir recht. Diese werden aber von root gestartet und können in /var/run schreiben.
Use ed once in a while!

michaels
Beiträge: 1164
Registriert: 29.03.2009 18:12:25

Re: Hilfe bei Skript mit Prozessen.

Beitrag von michaels » 25.05.2010 09:29:33

Na gut :D

Dann fällt mir aber noch gerade

Code: Alles auswählen

pgrep
ein...

Milbret
Beiträge: 827
Registriert: 26.05.2008 12:04:54
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Nörten-Hardenberg
Kontaktdaten:

Re: Hilfe bei Skript mit Prozessen.

Beitrag von Milbret » 25.05.2010 09:45:16

Okay ich danke für euer Feedback.
Ich werde es erst einmal mit einem pid File versuchen.
Da als Programmiersprache Java genutzt wird und dort scheinbar die Proccess Klasse keine ID mitliefert, werde ich dort was basteln müssen.

Wenn dies mehr Probleme machen sollte, versuche ich es mit pgrep und prüfe ob der Einsatz Sinn macht, da ich möglichst viele Systeme unterstützen möchte.
Bei Windows müsste ich schauen ob die Batch Programmierung dort soviele Lösungen bietet wie aktuell Linux.
Ansonsten muss ich dort mit pid Dateien arbeiten.

Martin
Es gibt keine if Schleife -> http://www.if-schleife.de/
Ansonsten GPL/GNU/Linux/Debian/Free Software 4 Ever :D

michaels
Beiträge: 1164
Registriert: 29.03.2009 18:12:25

Re: Hilfe bei Skript mit Prozessen.

Beitrag von michaels » 25.05.2010 09:53:45

Bei meinen Java Programmen mache ich es folgendermaßen:
- Beim starten erstelle ich eine .lock Datei (in der Regel im Arbeitsverzeichnis meiner Anwendung. Man könnte da auch eine Temp Datei nehmen und dieser sagen, das sie bei einem Shutdown der JVM gelöscht werden soll)
- Bei jedem Start schaust du dann einfach nach, ob die Datei schon existiert...
(auf jeden Fall ist sie OS-unabhängig)

Die Lösung ist natürlich nicht 100%ig sicher, da es durch ein killen des Prozesses dazu kommen kann, das die Datei nicht gelöscht wurde.

Die pgrep Lösung ist für Java Anwendungen meistens nicht besonders schlau, da die meisten Java Anwendungen keinen eigenen Prozessnamen erstellen...also einfach nur "java" heißen...

edit:
In dem Zusammenhang ist vielleicht noch interesant:

Code: Alles auswählen

Runtime.getRuntime().addShutdownHook( Thread....)
Du könntest dir ja auch mal

Code: Alles auswählen

Thread.currentThread().getId()
(keine Ahnung ob das für dein Problem funktioniert)

Milbret
Beiträge: 827
Registriert: 26.05.2008 12:04:54
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Nörten-Hardenberg
Kontaktdaten:

Re: Hilfe bei Skript mit Prozessen.

Beitrag von Milbret » 25.05.2010 10:09:36

michaels hat geschrieben:Bei meinen Java Programmen mache ich es folgendermaßen:
- Beim starten erstelle ich eine .lock Datei (in der Regel im Arbeitsverzeichnis meiner Anwendung. Man könnte da auch eine Temp Datei nehmen und dieser sagen, das sie bei einem Shutdown der JVM gelöscht werden soll)
- Bei jedem Start schaust du dann einfach nach, ob die Datei schon existiert...
(auf jeden Fall ist sie OS-unabhängig)

Die Lösung ist natürlich nicht 100%ig sicher, da es durch ein killen des Prozesses dazu kommen kann, das die Datei nicht gelöscht wurde.

Die pgrep Lösung ist für Java Anwendungen meistens nicht besonders schlau, da die meisten Java Anwendungen keinen eigenen Prozessnamen erstellen...also einfach nur "java" heißen...
Genau dies ist das Hauptproblem mit einer pid Datei Lösung.
Aber eine .lock Datei wäre an sich das gleiche.
Ich denke aber, dass diese Lösung am meisten Sinn macht.
Ich werde dann nur eine entsprechende Meldung ausgeben, wenn die Datei bereits vorhanden ist.

Martin
Es gibt keine if Schleife -> http://www.if-schleife.de/
Ansonsten GPL/GNU/Linux/Debian/Free Software 4 Ever :D

mtheiss
Beiträge: 154
Registriert: 01.04.2005 22:07:26
Lizenz eigener Beiträge: MIT Lizenz

Re: [Gelöst]]Hilfe bei Skript mit Prozessen.

Beitrag von mtheiss » 26.05.2010 07:34:54

Hallo,

schau dir mal Debianjsvc an. Damit werden Java Daemons unter Debian gestartet.
Das Programm bietet auch an, die PID wegzuschreiben oder einen Benutzer zum Ausführen anzugeben.

Als Beispiel für ein Init Script kann man gut Debiantomcat5.5 benutzen.

Gruss
Martin

Antworten