Lockfile löschen wenn ich Script mit STRG+C abbreche

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von Richard » 30.10.2018 15:26:24

Hallo,

ich habe mir irgendwann einmal etwas ergoogelt um das doppelte Ausführen eines Scriptes zu verhindern. Am Anfang des Scriptes steht

Code: Alles auswählen

lockfile -r 0 /tmp/lockfile || exit 1
am Ende dann

Code: Alles auswählen

trap delock EXIT
Zunächst wird eine Datei erstellt, wenn das Script ein zweites mal startet wird das verhindert. Mit 'trap' starte ich eine vorher festgelegte Funktion 'delock' die die Lockfile wieder löscht. Die Funktion wird ausgeführt, wenn das Signal 'EXIT' gesendet wird. Wenn ich nun am Notebook oder PC (also mit einer Benutzeroberfläche) das Script in einem Terminalfenster starte und mit STRG+C abbreche wird die lockfile gelöscht. Wenn ich das auf dem Raspbery Pi - der headless läuft - mache, geht das nicht. Wird das korrekte EXIT-Signal nur gesendet, wenn es unter einer GUI läuft und ein anderes wenn ohne?

Richard

Benutzeravatar
CH777
Beiträge: 1464
Registriert: 27.05.2008 16:37:17

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von CH777 » 30.10.2018 15:41:58

Was ist denn EXIT für ein Signal?
Nach meinem Verständnis sollte es eigentlich so sein:

Code: Alles auswählen

trap delock SIGINT
Versuch doch mal, ob das einen Unterschied macht.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von Richard » 30.10.2018 16:03:14

Ich kenne mich mit den ganzen Signalen nicht aus, das hab ich so 1:1 übernommen.

Mit SIGINT geht es auch nicht. Auch hier bleibt die Datei stehen.

Macht es vllt. einen Unterschied, dass ich mich per SSH mit dem Pi verbinde?

EDIT
Gibt es einen Befehl mit dem man sich die Signale anzeigen lassen kann, die bei einer bestimmten Tastenkombination ankommen?

Benutzeravatar
CH777
Beiträge: 1464
Registriert: 27.05.2008 16:37:17

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von CH777 » 30.10.2018 16:25:50

Richard hat geschrieben: ↑ zum Beitrag ↑
30.10.2018 16:03:14
Macht es vllt. einen Unterschied, dass ich mich per SSH mit dem Pi verbinde?
Das wird es wohl sein, denn das gesendete Signal bei STRG-C ist SIGINT (siehe z.B. hier).

Mit ssh kenne ich mich leider nicht aus, eine kurze Suche nach "ssh forward sigint" zeigt, dass das wohl nicht so ganz einfach geht.

Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von MSfree » 30.10.2018 16:29:39

CH777 hat geschrieben: ↑ zum Beitrag ↑
30.10.2018 15:41:58
Was ist denn EXIT für ein Signal?
Siehe man bash:
If a sigspec is EXIT (0) the command arg is executed on exit from the shell.
Die Frage hier ist eher, ob arg auch eine Shell-Fuktion sein darf oder ob das nur mit externen Executables funktioniert.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von bluestar » 30.10.2018 16:32:50


Benutzeravatar
MSfree
Beiträge: 10721
Registriert: 25.09.2007 19:59:30

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von MSfree » 30.10.2018 19:28:46

Das Probile ist, daß trap erst am Ende des Skripts aufgeführt ist.

Dieses Skript

Code: Alles auswählen

#!/bin/bash

MyExit()
{
  echo "My Exit Called"
}

trap MyExit EXIT

/bin/false || exit 1
sprint korrekt in die Funktion MyExit

Hingegen liefert dieses Skript keinerlei Ausgabe:

Code: Alles auswählen

#!/bin/bash

MyExit()
{
  echo "My Exit Called"
}


/bin/false || exit 1

trap MyExit EXIT
der exit hinter /bin/false verhindert, daß beim Sprung aus dem Skript die trap-Funktion aufgerufen wird.

Der OP sollte nun trap vorne ins Skript stecken und /bin/false durch filelock ersetzen.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von Richard » 30.10.2018 20:33:37

@ MSfree

Ja, so gehts es. Komisch nur, dass es vorher (auf dem Notebook und Desktop) auch problemlos lief, wenn ich die Funktion erst nach dem eigentlichen Script stehen hatte.

r4pt0r
Beiträge: 1237
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von r4pt0r » 31.10.2018 16:05:24

Anstatt sich auf lockfiles zu verlassen (was auf zig verschiedene Arten schief gehen kann...) wäre evtl ein pgrep oder notfalls ps | grep sinnvoller um nach einer bereits laufenden Instanz des Scripts zu suchen? Das hinterlässt keinen Müll und umgeht das genannte Problem :wink:

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Lockfile löschen wenn ich Script mit STRG+C abbreche

Beitrag von Richard » 31.10.2018 16:23:46

Wäre auch möglich, ich lass es jetzt erstmal so wie es ist.

Antworten