Ich habe einen Server, der beim Systemstart mit einem Yocto-kompatiblen Dateisystem auf einem eingebetteten Ziel gestartet wird. Das Dateisystem verwendet systemd für sein Dienstsystem.Wie aktiviert man eine System-Unit-Vorlage für die Boot-Zeit-Ausführung?
Mein Server verwendet eine Systemd-Vorlage Unit-Datei, und ich habe Probleme, es aktiviert zu bekommen. Wir verwenden die Vorlage, um den vollständigen Pfadnamen einer SQLite-Datenbankdatei anzugeben, die der Server verwendet. Die Vorlage Einheit-Datei benannt wird:
/lib/systemd/system/[email protected]
Sein Inhalt:
[Unit]
Description=Data Server application (with DB=%I)
After=syslog.target
[Service]
Type=simple
ExecStart=/opt/ndc/DataServer --DEBUG --databaseFile=%I
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
Die Datenbankdatei ist in /var/lib/ndc/DataServer.DB, so habe ich einen symbolischen Link in/lib/systemd/system:
# ln -s [email protected] [email protected]
Wenn ich laufen:
# systemctl start [email protected]
Der Server wird mit dem richtigen Parameter gestartet, sucht die Datenbank und wird erwartungsgemäß im Hintergrund ausgeführt. Also habe ich versucht die Dienstvorlage zu aktivieren, so dass es den Dienst während des Systemstarts Zeit starten wird:
# systemctl enable [email protected]
Failed to execute operation: No such file or directory
Da das nicht gelang, habe ich versucht damit die Vorlagendatei selbst:
# systemctl enable [email protected]
ln -s '/lib/systemd/system/[email protected]''/etc/systemd/system/multi-user.target.wants/[email protected]'
Auf der Oberfläche scheint das System zufrieden zu sein, aber Systemd führt den Bootvorgang von TDI_DataServer nicht korrekt aus. Es scheint, den "multi-user" -Parameter (vielleicht von dem WantedBy-Ziel in der Maßeinheitsdatei?) Zur Maßeinheitsdatei zu liefern. Hier
ist der systemctl Status:
$ systemctl status -l TDI*
● [email protected] - Data Server application (with DB=multi/user)
Loaded: loaded (/lib/systemd/system/[email protected]; enabled)
Active: activating (auto-restart) (Result: signal) since Sat 2000-02-05 20:41:05 UTC; 1s ago
Process: 2951 ExecStart=/opt/ndc/DataServer --DEBUG --databaseFile=%I (code=killed, signal=ABRT)
Main PID: 2951 (code=killed, signal=ABRT)
Feb 05 20:41:05 mityomapl138 DataServer[2951]: [949783265:2047] NOTICE: per-conn mem: 136 + 2140 headers + protocol rx buf
Feb 05 20:41:05 mityomapl138 DataServer[2951]: [949783265:2056] NOTICE: Listening on port 4243
Feb 05 20:41:05 mityomapl138 systemd[1]: [email protected]: main process exited, code=killed, status=6/ABRT
Feb 05 20:41:05 mityomapl138 systemd[1]: Unit [email protected] entered failed state.
Feb 05 20:41:05 mityomapl138 DataServer[2951]: 2000:02:05 20:41:05: WSServer connected on socket tcp://localhost:5556
Feb 05 20:41:05 mityomapl138 DataServer[2951]: 2000:02:05 20:41:05: bound to socket inproc://clients
Feb 05 20:41:05 mityomapl138 DataServer[2951]: 2000:02:05 20:41:05: DatabaseWorker using database multi/user
Feb 05 20:41:05 mityomapl138 DataServer[2951]: unable to open database file
Feb 05 20:41:05 mityomapl138 DataServer[2951]: terminate called after throwing an instance of 'SQLite::Exception'
Feb 05 20:41:05 mityomapl138 DataServer[2951]: what(): unable to open database file
● TDI_DataServer.service
Loaded: loaded (/etc/init.d/TDI_DataServer)
Active: inactive (dead)
bin ich etwas fehlt? Jede Hilfe würde sehr geschätzt werden.
Hinweis: Wenn ich meinen eigenen symbolischen Link in das Verzeichnis /etc/systemd/system/multi-user.target.wants mit dem Namen "TDI_DataServer @ - var-lib-ndc-DataServer.DB.service ", alles funktioniert gut. Es ist nur, dass "systemctl enable" das für mich tun soll – f1fan44