C [Linux] - Restart Skript

Tockra

Lt. Commander
Dabei seit
Dez. 2008
Beiträge
1.057
Hey Leute,

Ich wollte ein kleines Restart Skript schreiben, was eigentlich recht einfach sein sollte.
Es soll schauen, ob ein Programm aktuell auf TCP/UDP Port XXX lauscht (das Programm gerade läuft) und wenn es nicht läuft soll es neugestartet werden (service <name> start).
Danach soll per Sleep 1-5 Minuten gewartet werden und dann noch mal der Port geprüft werden.

Welche Befehle und Header brauche ich da?

Gruß
T
 

baizon

Commander
Dabei seit
Juni 2007
Beiträge
2.084
Dazu brauchst du kein C, ein bash Skript sollte es auch schon tun. Wie ungefähr in dieser Form:
Code:
if ! lsof -Pi :8080 -sTCP:LISTEN -t >/dev/null ; then
    service <name> start
fi
 
Zuletzt bearbeitet:

DaZpoon

Commander
Dabei seit
Dez. 2009
Beiträge
2.448
Was nun, Skript oder C(-Programm)?
 

baizon

Commander
Dabei seit
Juni 2007
Beiträge
2.084
Naja, bei C brauchst du Bibliotheken, hier nutzt du schon die vorhandenen Befehle.
 

shrek456

Lieutenant
Dabei seit
Dez. 2009
Beiträge
631
Das stimmt generell(compilierter Code ist tendenziell immer schneller als interpretierter Code), aber ich denke für deine Zwecke sollte die Effizienz keine Rolle spielen :)
 

stwe

Lieutenant
Dabei seit
Feb. 2011
Beiträge
656
Wenn du ein System mit systemd benutzt kannst du auch systemd zum Überwachen von Prozessen und automatischen Neustarten benutzen. Da musst du nur ein Unit-File erstellen und anpassen.
 
V

VikingGe

Gast
Ist C nicht irgendwie effizienter weil es direkt in Maschienensprache übersetzt wird und das Shell Skript nicht?
Das C-Programm würde in dem Fall aber auch nichts als Systemaufrufe tätigen - ob man das nun in der Shell macht und ein paar tausend CPU-Takte auf den Befehlsparser verschwendet oder nicht, ist da sowas von egal...


Aber zum Vorhaben - kann dein Service keine Socket Activation? systemd hat für sowas nativen Support, wenn die Anwendung es also auch unterstützt, dann das nutzen.
 

nullPtr

Lt. Junior Grade
Dabei seit
März 2011
Beiträge
425
Lass mich es nochmal klar ausdrücken: Das Code von baizon erfüllt deine Anforderungen, ist auf den ersten leicht verständlich und wartbar. C ist hier nicht die beste Wahl. Deine Effizienzbedenken sind völlig unangebracht. Solltest du trotzdem welche anmelden wollen, miss erstmal die Ausführungszeiten von baizons Code und probier's alternativ noch mit netstat(1).

Wenn du das wirklich in C implementieren willst, dann nicht, weil du eine vernünftige und schnelle Lösung suchst. Wenn du es aus Lerngründen machst, dann bring Eigeninitiative (schau dir z.B. an, wie lsof(1) oder netstat(1) das Portlisting erzeugen und wie service(1) einen service startet). Ansonsten verschwende nicht weiter unsere Zeit.
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Gibt es nicht genau dafür inetd?
€: Der ist sogar in C!
 
Zuletzt bearbeitet:
Top