Grundlegende System- und Servicedateien schreiben

103

Ich entwickle eine Nodejs-Anwendung, mit der der Benutzer über HTTP auf localhost interagiert. Es gibt praktisch keine Parameter und der Daemon hat praktisch keine Abhängigkeiten und muss nur bis zur Anmeldezeit aktiv sein.

Ich möchte die Redewendungen für Start-Skripte auf jeder Plattform befolgen, und das bedeutet Upstart unter Ubuntu und systemd unter Fedora.

  • Gibt es gute Tutorials zum Schreiben von System- und Systemdateien?
  • Gibt es Best Practices, die beachtet werden müssen?

Ich habe diese Ressourcen gefunden:

Ich suche hauptsächlich eine Art API als Referenz sowie ein grundlegendes Format, dem ich folgen kann.

Beatgammit
quelle
Die Arch Linux Wiki-Seite über systemd enthält einen interessanten Abschnitt zum Schreiben von Dienstdateien.
Rudy Matela
> man systemd.service>> man systemd.unit
truezion

Antworten:

29

Ich würde mit den Systemd-Handbuchseiten beginnen . Sie stellen eine umfassende Ressource des Systems und der Dienste dar.

Es gibt auch die freedesktop Systemd FAQs .

jasonwryan
quelle
43
Die Manpages werden nützlich sein (ich wünschte, es wäre sauberer), aber gibt es ein grundlegendes Tutorial für Systemdateien? Wie welche Teile notwendig sind, welche Teile empfohlen werden und welche Teile optional sind. Die Manpages scheinen davon auszugehen, dass ich bereits ein Experte für systemd-Systemdateien bin, was ich nicht bin.
Beatgammit
Das weiß ich leider nicht. Es besteht wahrscheinlich die Annahme, dass Sie, wenn Sie Initskripte schreiben, bereits wissen, wie man Initskripte schreibt. Durchsuchen
jasonwryan
1
Vielen Dank! Mit Ihrer Hilfe und dem Blog, den ich gefunden habe, konnte ich ein grundlegendes zum Laufen bringen. Systemd scheint viel netter zu sein als Upstart oder der alte Systemv Init Daemon.
Beatgammit
49
Wer dort Zeit hat, lebt davon. Ich meine, wenn Sie wissen, was Sie tun, ist das eine großartige Referenz, aber die Handbuchseiten sind komplex.
Jonathan Komar
1
@ macmadness86 Das OP suchte nach einer maßgeblichen Quelle (siehe letzter Absatz). Für die meisten Anforderungen ist manes mehr als ausreichend , die Servicedatei für eine ähnliche App zu lesen und dann bestimmte Teile der Seite zu konsultieren , um dorthin zu gelangen. Sie sind eigentlich ziemlich einfach.
Jasonwryan
180

Das folgende Beispiel ist von diesem Link inspiriert, der eigentlich nicht alle Schritte erwähnt und nur zur Quellenangabe aufgeführt ist: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Schritt 1 : Ich habe diese Datei (Speicherort für Notizen) erstellt, die im Wesentlichen einen Bash-Prozess mit einem erweiterten Argument auslöst. Sie könnten Ihren eigenen Befehl abfeuern, der sich von Bash unterscheiden könnte.

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

Schritt 2 :

Nachladen systemd:

systemctl daemon-reload

Starten Sie den neuen Dienst:

systemctl enable foo

(ähnlich kannst du disablees)

(optional) Schritt 3 : Es sollte automatisch beim nächsten Neustart im Mehrbenutzermodus (Ausführungsebene 3) gestartet werden. Wenn Sie es jedoch sofort starten möchten:

systemctl start foo
systemctl status foo # optional, just to verify

Update: Der Vollständigkeit halber sollte ich hinzufügen, dass Ubuntu Bionic eine sehr gründliche Manpage zu haben scheint. RTFM hier

Nekromant
quelle
57
Vielen Dank, dass Sie ein kurzes Tutorial gepostet haben und nicht nur auf Offsite-Manpages verlinken!
Toby J
2
systemctl hat eine cat-Befehlsverknüpfung als Referenz.
Andy Bettisworth
Was ist die cat-Befehlsverknüpfung? Wie können Sie die Systemd-Steuerdateien erstellen und bearbeiten, ohne den gesamten Pfad eingeben zu müssen?
JpaytonWPD
Welche Berechtigungen sollte diese Datei im Idealfall haben?
Knocte
2
Laut Manpage von systemd.unit solltest du es einfügen /etc/systemd/system. In / usr / lib / systemd werden die Dateien der richtigen Distributionspakete abgelegt.
wbkang
4

Die Redhat-Dokumentation ist eine großartige Quelle.

caracal
quelle
2
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Stephen Rauch
1
@StephenRauch Ich weiß, dass einfache Links nicht sehr willkommen sind, aber dies ist ein riesiges Thema und es ist nicht einfach, es in einer Antwort zusammenzufassen.
caracal
Dies war die am besten lesbare Anleitung, die ich gefunden habe. Das ist eine gute Antwort. :-)
behandle deine Mods gut
DigitalOcean hat auch eine ziemlich umfassende Reihe von Tutorials und die zugehörige Dokumentation: digitalocean.com/community/tutorials/...
irbanana