Systemd може обробляти різні типи послуг, зокрема, одне з наступних
simple
- Тривалий процес, який не спрацьовує, а залишається прив’язаним до оболонки.
forking
- Типовий демон, який розщеплює себе від процесу, який його здійснював, фактично фоновий.
oneshot
- недовговічний процес, який, як очікується, завершиться.
dbus
- Як просто, але повідомлення про завершення запуску процесів надсилається через dbus.
notify
- Як просто, але сповіщення про завершення запуску процесів надсилається через inotify.
idle
- Як просто, але двійковий файл запускається після відправлення завдання.
У вашому випадку ви вибрали, Type=forking
що означає, що systemd чекає, коли процес розщепиться і батьківський процес закінчиться, що це сприймає як ознаку того, що процес почався успішно. Однак ваш процес цього не робить - він залишається на передньому плані і так systemctl start
буде зависати нескінченно або до тих пір, поки процеси не завершаться.
Натомість ви хочете Type=simple
, що є типовим, щоб ви могли повністю видалити рядок, щоб отримати той самий ефект. У цьому режимі systemd не чекає запуску процесів (оскільки не має можливості знати, коли це сталося), і тому продовжує виконувати та залежні служби відразу. У вашому випадку таких немає, тому це не має значення.
Невелика примітка про безпеку:
Ви запускаєте послугу як root, це відлякує, оскільки вона менш безпечна, ніж запуск її як непривілейованого користувача. Причиною цього є те, що якщо в jekyll є вразливість, яка якось дозволяє виконувати команди (можливо, через код, який він розбирає), то зловмиснику не потрібно нічого більше робити, щоб повністю володіти вашою системою. Якщо, з іншого боку, він працює як непривілейований користувач, зловмисник здатний завдати стільки ж шкоди, скільки й користувачеві, і тепер повинен намагатися отримати кореневі привілеї, щоб повністю володіти вашою системою. Це просто додає додатковий шар, зловмисники повинні йти.
Ви можете просто запустити його як того самого користувача, на якому працює ваш веб-сервер, але це залишає вас відкритим для іншої потенційної атаки. Якщо на вашому веб-сервері є вразливість, яка дозволяє користувачеві маніпулювати файлами у вашій системі, вони можуть змінювати згенеровані файли html або, в гіршому випадку, вихідні файли та примушувати ваш сервер обслуговувати все, що завгодно. Однак якщо згенеровані файли та вихідні файли читаються тільки веб-сервером і можуть бути записані іншим непривілейованим користувачем, вони не зможуть, як легко, змінити їх, атакуючи веб-сервер.
Однак, якщо ви просто подаєте статичні файли з цього сервера і постійно оновлюєте сервер, ці атаки є дуже малоймовірними - але все-таки можливими. Ви несете відповідальність за те, щоб зважувати ризики та накладні витрати, якщо їх налаштувати, виходячи з того, наскільки важливою є ваша система, але обидва ці поради дуже прості у налаштуванні та поруч з ними не мають накладних витрат на обслуговування.
Type=forking
. Більше того, він не працюватимеexecStart
як розширення оболонки, так що&
в кінці ніколи не буде розумітися як фоновий прапор.