[gelöst]Automatisch abgestürtes Programm wieder starten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
synapsenstau
Beiträge: 171
Registriert: 08.10.2013 09:56:34
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Südharz

Re: [gelöst]Automatisch abgestürtes Programm wieder starten

Beitrag von synapsenstau » 30.06.2014 11:12:56

So, habe nun die Ausgabe in ein logfile verfachtet. Leider hagelt es jetzt Fehlermeldungen. Sind bestimmt nur Syntaxfehler, welche ich aber nicht gelöst kriege.

Code: Alles auswählen

Zeile 30: -a: Kommando nicht gefunden.
Zeile 44: -n: Kommando nicht gefunden.
Zeile 52: 30.06.2014  10:35:07  CleanDC.exe restart: Kommando nicht gefunden.
und hier noch mal die Zeilen einzeln:

Code: Alles auswählen

30: if ! -a $logfile				# if no logfile then create this
44: if -n prg_pid
52: err_log_txt=$("$err_date  $err_time  $suchstring restart")
Das ganze Script ist hier: NoPaste-Eintrag37867

Desweiteren bin ich für Kritik offen, ob der von einem Anfänger gewählte weg so in Ordnung ist.
..::: Intel® Core™ i5-6600 :::..::: 16 GB Ram :::..
..::: 1 TB Nvme :::..::: 1 TB SSD :::..::: NVIDIA GeForce GTX 1070 :::.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [gelöst]Automatisch abgestürtes Programm wieder starten

Beitrag von rendegast » 30.06.2014 12:50:50

if ! -a $logfile
then
->

Code: Alles auswählen

  if [[ ! -a $logfile ]]       
  then
Bzgl. Quoting

Code: Alles auswählen

$ fil=; if [ -a $fil ]; then echo hallo; fi
hallo

$ fil=; if [ -a "$fil" ]; then echo hallo; fi
Bei Nicht-Quoting wäre das Ergebnis also eigentlich falsch.

Nach 'man test', 'man bash' ist '-a datei' eigentlich ein bashism,
Bei /usr/bin/test wäre es für 'EXPR -a EXPR' (im Sinne von "wahr and wahr")
(Und obwohl es hier scheinbar funktioniert.).
Wegen der Klarheit würde ich '-f datei' bevorzugen.



--------------------------------------------------------------------
if -n prg_pid
then
->

Code: Alles auswählen

  if [[ -n $prg_pid ]]
  then  
Obige [[]] sind bashism.
Bei einfachen [] müßte gequotet werden

Code: Alles auswählen

  if [ -n "$prg_pid" ]
  then  
wenn prg_pid zBsp. mehrere Zahlen enthält.
Wobei ich mir bei den -n/-z-Test immer etwas unsicher bin.
Daher bevorzuge ich den klassischen POSIX-walkaround

Code: Alles auswählen

[ "x" = "x$bla" ] ....


--------------------------------------------------------------------
prgstart=env WINEPREFIX="/home/maik/.wine" wine "/home/maik/.wine/drive_c/Program Files/CleanDC++/CleanDC.exe" > /dev/null
...
$prgstart
eher ->

Code: Alles auswählen

prgstart='env WINEPREFIX="/home/maik/.wine" wine "/home/maik/.wine/drive_c/Program Files/CleanDC++/CleanDC.exe" > /dev/null  2>&1'
...
    $prgstart
oder

Code: Alles auswählen

prgstart="env WINEPREFIX=\"/home/maik/.wine\" wine \"/home/maik/.wine/drive_c/Program Files/CleanDC++/CleanDC.exe\" > /dev/null  2>&1"
...
    $prgstart
da jetzt noch Variablen möglich wären.

Am besten halte ich für den Zweck aber eine function

Code: Alles auswählen

prgstart() {
    env WINEPREFIX="$HOME/.wine" wine "$HOME/.wine/drive_c/Program Files/CleanDC++/CleanDC.exe" > /dev/null 2>&1
}
...
    prgstart
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten