mich selbst updaten via rpm, beenden und neustarten
-
Servus,
ich habe hier eine Applikation, die sich möglichst einfach von außen updaten lassen soll. Es ist ein Service, der mit root-rechten läuft.
Mein Plan sieht etwa so aus:
1. Ich liefere eine RPM-Paket aus, in dessen spec %pre und %post skripte spezifiziert sind, die den service gegebenenfalls vor der installation anhalten (sollte es ein update sein) und nach der installation direkt starten. Etwa so:%pre if [-f /etc/init.d/mein_service ] /etc/init.d/mein_service stop fi %post /etc/init.d/mein_service start %preun /etc/init.d/mein_service stop
2. Der Service, also die von mein_service gestartete Applikation weiß, wo das RPM liegt. Jetzt müsst sie also bloß rpm update anwerfen, etwa so:
#include <unistd.h> void update_me() { string args("-U ").append(path_to_rpm); execl("/bin/rpm", args.c_str()); }
Das ist mal mein grober Plan.
Kann das funktionieren? Also kann ich mir aus meinem Prozess heraus den Ast absägen, auf dem ich sitze?
Gruß,
Phil
-
Hallo Philipp.
PhilippM schrieb:
Servus,
Das ist mal mein grober Plan.
Kann das funktionieren? Also kann ich mir aus meinem Prozess heraus den Ast absägen, auf dem ich sitze?
Gruß,
PhilVerwende doch pthreads und mache aus der Aktion einen Child-Prozess. Wenn du den Parent tötest, läuft der Child weiter, wenn alles entsprechend eingerichtet wurde. Ich habe eine Software geschrieben, die sich auch so verhält. Wenn ich den Service stoppe, dann werden die aktiven Verbindungen, welche eigene Childs sind, noch zu Ende verarbeitet.
Gruß,
Dirk