PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script sauber beenden beim herunterfahren des Servers



armin gips
09.01.16, 18:44
Hallo zusammen!
Ich hoffe ich bin in diesem Unterforum richtig mit meiner Fragestellung?!

Vielleicht ist meine Frage ganz einfach zu beantworten, aber auch nach langer Suche habe ich nicht wirklich eine Lösung gefunden.

Die Frage lautet: Wie beende ich ein Shell-Script sauber bevor der Rechner herunterfährt?

Im Detail:
Wird der Rechner gebootet, wird über die Crontab mittels @reboot in screen ein Shell-Schript gestartet. Dieses Script läuft und zeichnet Daten auf.
Wird der Rechner nun automatisiert heruntergefahren, so soll dieses Script vorher sauber beendet werden (wie ein manuelles Strg+C), damit die Daten (eine GPX-Datei) sauber auf der Platte gespeichert wird.

Wie mache ich das am besten?

Ratlose Grüße aus dem Rheinland,

AG

Thorashh
09.01.16, 20:21
Moin

Erstelle Dir ein Startupskript und starte dein Programm darüber.
In dem stop-Zweig, kannst Du dann dein Programm sauber beenden.

Thorashh

BetterWorld
09.01.16, 20:31
Und das macht man meist indem man dem Prozess ein Signal schickt, der dann entsprechend reagiert.
Also im Stop-Zweig dem Script z.B. ein SIGUSR1 senden, was man dann trappt.
(Oder direkt ein SIGQUIT, wenn man selbst nichts aufräumen will.)

Ein Trap ungefähr so:

clean(){
do_your_cleaning_here
rm -rf /tmp/$mytemp
}
trap clean SIGUSR1

fork
09.01.16, 23:13
Bzgl. trap würde ich auch noch empfehlen andere Signale auch mitzunehmen.

Wenn der Rechner runterfährt, dann gibt's idR ein TERM. Und HUP, QUIT und INT(=Strg+C) am besten auch noch gleich mitnehmen.

Also....


trap clean SIGUSR1 SIGTERM SIGHUP SIGQUIT SIGINT

--> man 7 signal

---

@BW:
Warum Du SIGUSR1 vorschlägst erschliesst sich mir allerdings nicht.

SIGUSR1 ist doch eher für andere Aktionen als "Bitte Beende Dich!" gedacht. Im aktuellen Kontext wäre für mich SIGUSR1 ganz passend um dem Script zu signalisieren: Schreib' Doch bitte mal die Daten auf die Festplatte(und laufe anschliessend weiter).

BetterWorld
09.01.16, 23:34
jou.

Ich nehme immer
trap clean EXIT

EXIT ist in der Bash eine Kombination aller Signale, die beenden.