Systemd jest w stanie obsługiwać różne typy usług, w szczególności jeden z poniższych
simple
- Długotrwały proces, który nie tworzy tła i pozostaje przywiązany do powłoki.
forking
- Typowy demon, który sam się odrywa od procesu, który go uruchomił, skutecznie tworząc tło.
oneshot
- Krótkotrwały proces, który ma zakończyć się.
dbus
- Jak proste, ale powiadomienie o zakończeniu uruchamiania procesów jest wysyłane przez dbus.
notify
- Jak proste, ale powiadomienie o zakończeniu uruchamiania procesów jest wysyłane przez inotify.
idle
- Jak proste, ale plik binarny jest uruchamiany po wysłaniu zadania.
W twoim przypadku wybrałeś, Type=forking
co oznacza, że systemd czeka na sam proces rozwidlenia i na zakończenie procesu nadrzędnego, co przyjmuje jako wskazanie pomyślnego rozpoczęcia procesu. Jednak Twój proces tego nie robi - pozostaje na pierwszym planie, więc systemctl start
zawiesi się na czas nieokreślony lub do czasu awarii procesów.
Zamiast tego chcesz Type=simple
, co jest ustawieniem domyślnym, dzięki czemu możesz całkowicie usunąć linię, aby uzyskać ten sam efekt. W tym trybie systemd nie czeka na zakończenie procesu (ponieważ nie ma pojęcia, kiedy to się stało), więc od razu kontynuuje wykonywanie zależnych usług. W twoim przypadku nie ma ich, więc to nie ma znaczenia.
Mała uwaga na temat bezpieczeństwa:
Usługa jest uruchamiana jako root, jest to odradzane, ponieważ jest mniej bezpieczne niż uruchamianie jej jako nieuprzywilejowanego użytkownika. Powodem tego jest to, że jeśli w jekyll istnieje luka, która w jakiś sposób pozwala na wykonywanie poleceń (być może za pomocą parsowanego kodu), atakujący nie musi nic więcej robić, aby całkowicie przejąć kontrolę nad twoim systemem. Jeśli z drugiej strony jest uruchamiany jako użytkownik nieuprzywilejowany, atakujący może wyrządzić tylko tyle szkód, co ten użytkownik i musi teraz spróbować uzyskać uprawnienia roota, aby całkowicie przejąć kontrolę nad systemem. Po prostu dodaje dodatkową warstwę, którą muszą przejść napastnicy.
Możesz po prostu uruchomić go jako ten sam użytkownik, który uruchamia twój serwer WWW, ale to pozostawia cię otwartym na kolejny potencjalny atak. Jeśli na Twoim serwerze internetowym występuje luka, która pozwala użytkownikowi manipulować plikami w systemie, może modyfikować wygenerowane pliki HTML lub, co gorsza, pliki źródłowe i powodować, że Twój serwer obsłuży wszystko, co zechce. Jeśli jednak wygenerowane pliki i pliki źródłowe są czytelne tylko dla serwera WWW i mogą być zapisywane jako inny nieuprzywilejowany użytkownik, nie będą w stanie tak łatwo zmodyfikować ich poprzez atak na serwer WWW.
Jeśli jednak po prostu podajesz pliki statyczne z tego serwera i aktualizujesz serwer, ataki te są bardzo mało prawdopodobne - ale nadal możliwe. Twoim obowiązkiem jest zrównoważyć ryzyko i koszty związane z jego konfiguracją w zależności od tego, jak krytyczny jest twój system, ale obie te wskazówki są bardzo proste w konfiguracji i nie wymagają żadnych kosztów utrzymania.
Type=forking
. Co więcej, nie będzie działaćexecStart
jako rozszerzenie powłoki, więc&
na końcu nigdy nie będzie rozumiane jako flaga tła.