Halten Sie für jede Datei in einem Verzeichnis einen Server am Leben

Halten Sie für jede Datei in einem Verzeichnis einen Server am Leben

Momentane Situation

Ich betreibe einen Linux-Server (Arch). Ich habe eine Serveranwendung, die wie folgt ausgeführt wird:

run_server filename --port=xxxx

Ich habe systemd-Servicedateien geschrieben. Jede davon hält einen Prozess für eine bestimmte Datei auf einem bestimmten Port am Leben. Wenn ich eine neue Datei bereitstellen möchte, kopiere ich die systemd-Servicedatei, bearbeite sie, weise ihr einen neuen Port zu und aktiviere/starte den neuen Dienst.

Dies ist viel Handarbeit, da die Dateien oft von einem Team von Personen hinzugefügt und entfernt werden.

Anfrage

Wenn ich ein Verzeichnis mit Dateien habe

directory/firstfile
directory/secondfile
....

Ich möchte für jede Datei einen einzelnen Prozess am Leben erhalten:

run_server firstfile --port=9001
run_server secondfile --port=9002
...

Wenn eine Datei aus dem Verzeichnis entfernt wird, sollte der Prozess gestoppt werden. Wenn eine Datei zum Verzeichnis hinzugefügt wird, sollte ein neuer Prozess gestartet werden.

Wie kann ich das erreichen?

Antwort1

Okay, ich habe mich für eine Kombination der Ratschläge der beiden Kommentatoren entschieden.

  1. Eine Unit-Datei mit Systemd-Vorlagen wurde erstellt ( )/etc/systemd/system/[email protected]

    [Service]
    Type=simple
    ExecStart=/../run_server %i
    ...
    
  2. Erstellen Sie einen systemd-Pfaddienst ( /etc/systemd/system/sync_server_units.path), der das Verzeichnis überwacht

    [Path]
    PathModified=/path/to/directory
    ...
    
  3. Damit wird () gestartet /etc/systemd/system/sync_server_units.service, ein einfaches run_once:

    [Service]
    Type=oneshot
    ExecStart=/../sync_server_units
    
  4. Schließlich habe ich ein Skript ( sync_server_units), das den Inhalt des Verzeichnisses mit der Ausgabe von vergleicht systemctl list-units --all 'run_server@*'und den auf der Vorlage basierenden Dienst nach Bedarf aktiviert/startet/stoppt/deaktiviert.

Funktioniert bisher gut!

verwandte Informationen