Zapisywanie podstawowych plików usługi systemowej

103

Zajmuję się tworzeniem aplikacji Nodejs, z którą użytkownik wchodzi w interakcje za pośrednictwem protokołu HTTP na hoście lokalnym. Praktycznie nie ma żadnych parametrów, a demon praktycznie nie ma żadnych zależności i po prostu musi być gotowy do zalogowania się.

Chciałbym śledzić idiomy na każdej platformie dla skryptów startowych, a to oznacza Upstart na Ubuntu i systemd na Fedorze.

  • Czy są jakieś dobre samouczki dotyczące zapisywania systemowych plików systemowych?
  • Czy są jakieś „najlepsze praktyki”, o których należy pamiętać?

Znalazłem te zasoby:

W większości szukam API jako odniesienia, a także podstawowego formatu do naśladowania.

beatgammit
źródło
Strona Arch Arch Wiki na temat systemd zawiera interesującą sekcję dotyczącą pisania plików serwisowych.
Rudy Matela
> man systemd.service>> man systemd.unit
truezion

Odpowiedzi:

29

Zacznę od stron podręcznika Systemd . Stanowią kompleksowy zasób systemu i usług.

Dostępne są również często zadawane pytania dotyczące Systemd Freedesktop .

jasonwryan
źródło
43
Strony podręcznika przydadzą się (choć chciałbym, żeby było czystsze), ale czy istnieje podstawowy samouczek pliku systemowego? Podobnie jak które części są konieczne, które części są zalecane, a które opcjonalne. Strony podręcznika wydają się zakładać, że jestem już ekspertem w zakresie systemowych plików systemowych, a ja nie.
beatgammit
Niestety nie jestem tego świadomy. Prawdopodobnie istnieje założenie, że jeśli piszesz skrypt skryptowy, już wiesz, jak pisać skrypt skryptowy. Przejrzyj skrypty Arch i wybierz taki, który jest potrzebny: archlinux.org/packages/community/i686/systemd
jasonwryan
1
Dzięki! Z twoją pomocą i blogiem, który znalazłem, udało mi się uruchomić podstawowy. Systemd wydaje się o wiele ładniejszy niż poprzedni demon systemst lub startstart.
beatgammit
49
Kto ma tam czas, zaczyna od tego. Chodzi mi o to, że jeśli wiesz, co robisz, to świetna informacja, ale święta krowa, strony podręcznika są złożone.
Jonathan Komar
1
@ macmadness86 OP szukał wiarygodnego źródła (patrz ostatni akapit); w przypadku większości potrzeb przeczytanie pliku usługi podobnej aplikacji, a następnie zapoznanie się z określonymi częściami manstrony będzie wystarczające, aby Cię tam dostać. W rzeczywistości są dość proste.
jasonwryan
180

Poniższy przykład jest zainspirowany tym linkiem, który w rzeczywistości nie wspomina o wszystkich krokach i jest wymieniony tylko po to, by podać źródło: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Krok 1 : Utworzyłem ten plik (położenie notatki), który zasadniczo uruchamia proces bash z rozszerzonym argumentem. Możesz wystrzelić własne polecenie, które może różnić się od uderzenia.

[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

Krok 2 :

Załaduj ponownie systemd:

systemctl daemon-reload

Uruchom nową usługę:

systemctl enable foo

(podobnie możesz to disablezrobić)

(opcjonalnie) Krok 3 : Powinien rozpocząć się automatycznie przy następnym uruchomieniu w trybie wielu użytkowników (poziom uruchamiania 3), ale jeśli chcesz go uruchomić od razu:

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

Aktualizacja: Dla kompletności powinienem dodać, że ubuntu bionic wydaje się mieć bardzo dokładną stronę podręcznika. RTFM tutaj

nekromanta
źródło
57
Dziękujemy za opublikowanie krótkiego samouczka, a nie tylko odsyłanie do stron podręcznika użytkownika poza witryną!
Toby J
2
Systemctl ma skrót poleceń cat, do celów informacyjnych.
Andy Bettisworth,
Co to jest skrót poleceń kota? Jak sposób tworzenia i edytowania systemowych plików kontrolnych bez podawania całej ścieżki?
JpaytonWPD
jakie uprawnienia powinien mieć ten plik?
knocte
2
Według strony podręcznika systemd.unit powinieneś go umieścić /etc/systemd/system. / usr / lib / systemd to miejsce, w którym odpowiednie pakiety dystrybucyjne umieszczają swoje pliki.
wbkang
4

Dokumentacja Redhat jest doskonałym źródłem.

karakal
źródło
2
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Stephen Rauch
1
@StephenRauch Wiem, że zwykłe linki nie są mile widziane, ale jest to ogromny temat i nie jest łatwo streścić w odpowiedzi.
caracal
To był najbardziej czytelny przewodnik, jaki znalazłem. To dobra odpowiedź. :-)
traktuj swoje mody dobrze
DigitalOcean ma również dość obszerny zestaw ćwiczeń i odpowiedniej dokumentacji: digitalocean.com/community/tutorials/...
irbanana