Ist es einem systemd-Dienst möglich, sich selbst zu aktualisieren?

Ist es einem systemd-Dienst möglich, sich selbst zu aktualisieren?

Hallo, Leute von fehlerfreiem Server,

Ich möchte einen systemd-Dienst schreiben, der sich selbst aktualisieren kann.

Insbesondere sollte es alle 5 Minuten bei Amazon S3 nach neuen Versionen seiner Binärdateien und .serviceDateien suchen. Wenn diese aktualisiert wurden, sollte es sie herunterladen und ersetzen und sich dann neu starten.

Leider ist es mir nicht gestattet, dass systemd Änderungen an verwendeten Dateien zulässt.

Gibt es eine Standardmethode, um dies zu erreichen?

Danke!

EDIT: Zur Klarstellung: Ich frage, ob dies mit einem einzigen Dienst möglich ist. Mir ist klar, dass ich ein Paar von Diensten haben könnte, die sich gegenseitig aktualisieren, aber das scheint unelegant.

Antwort1

Das Aktualisieren von Dateien, die mit systemd .service-Dateien oder Programm-Ausführbaren in Zusammenhang stehen, ist dasselbe wie das Aktualisieren jeder anderen Datei.

Eigentlich sollten Sie hierfür ein Konfigurationsmanagement wie Ansible verwenden. Um es aber so zu erledigen, wie es ist, könnte Ihr allgemeiner Arbeitsablauf die Verwendung eines Bash-/Python-Skripts sein, das Folgendes tut:

  1. Ruft die Datei(en) vom Webserver/s3/usw. ab.
    • Sie können eine schnelle MD5-Summe-Prüfung durchführen, um Unterschiede zu vergleichen. Oder vergleichen Sie Daten und andere Metadaten, um festzustellen, ob die Datei neu oder geändert ist
  2. Ersetzen Sie die Dateien nach Bedarf
    • Wenn die Dateien gerade verwendet werden, müssen Sie möglicherweise vorher stopden Dienst ( ) ausführen.service <servicename> stop
  3. Führen Sie es aus systemctl daemon-reload, um systemd anzuweisen, die Servicedateien erneut auf Änderungen zu „scannen“.
  4. Startet den betreffenden Dienst neu/startet ihn

Sie können das Skript dann in Cron oder als Systemd-Timer laden, um es nach einem Zeitplan auszuführen.

verwandte Informationen