Почему моя включенная служба systemd не запускается при загрузке?

Я долгое время был поклонником того, "что используют ваши друзья". Они также смогут лучше всего помочь вам с системой, которую они используют.

Конечно, есть различия между Ubuntu и LFS или полностью самокомпилированным gentoo. Но если вы спросите, Fedora или Ubuntu или ... что лучше, вы в основном получите мнения. Я предпочитаю системы на основе Debian, такие как Ubuntu, но, опять же, кто-то из мира Red Hat, вероятно, предпочтет Fedora.

20
12.11.2016, 01:05
4 ответа

Понятия не имею, почему, но чтобы заставить это работать, я:

удалил Environment = DISPLAY =:% i

добавил Пользователь = переменная

Убедился, что правильный файл находится в /etc/systemd/system/emacs.service (ранее это была жесткая ссылка)

и повторно run systemctl enable emacs

Это заставило его работать.

РЕДАКТИРОВАТЬ Настоящая проблема в том, что у меня была опечатка в строке 3: Documentatin

Я нашел это, проверив journalctl . Я предлагаю всем, у кого есть проблемы со сценарием systemd, сделать то же самое, поскольку на stderr не было отправлено сообщение об ошибке.

24
27.01.2020, 19:44

ох, это интересно.

Если выбрать случайную служебную единицу и посмотреть на нее, она зависит от конкретной цели вместо default.target . Последнее является символическим ... настроенная ссылка на конкретную цель, семантически не имеет смысла. (См. systemctl set-default )

Это может объяснить, почему ваша служба отображается как отключена после ее включения. Попробуйте заменить, например, default.target в служебном файле на multi-user.target .

(Отсутствие сообщения об ошибке при отказе включения кажется дефектом в systemd. Мне почти интересно, есть ли теперь у вас каталог /etc/systemd/system/default.target.wants ).

2
27.01.2020, 19:44

У вас есть переменная окружения DISPLAY, это означает, что вы хотите, чтобы X11 был запущен. Поэтому вам нужно иметь способ заблокировать вашу службу до этого момента.

Это делается с помощью опции After=... опцию.

Сам я этого не делал, поэтому не могу сказать, что это сработает, но, скорее всего, это как-то связано с graphical.target.

[Unit]
After=graphical.target

Другая возможность, если X-сервер не запускается сразу (т.е. у вас есть экран входа в систему с lightdm или что-то подобное), то вам, возможно, придется использовать WantedBy=... вместо:

[Unit]
WantedBy=graphical.target

Если вам надоест заставлять его работать с systemd, возможно, вы захотите рассмотреть обычный способ, которым менеджеры X-Windows заставляют его работать.

Существует файл ~/.xprofile, который работает подобно файлу ~/.bashrc.

Существует также файл ~/.config/autostart/*.desktop. Он будет автоматически запускать любые приложения, определенные в нем.

Эти решения не являются общесистемными, однако, если у вас несколько пользователей, для каждого из них должна быть своя запись. Кроме того, приложение запускается не от имени root, а от вашего имени.


В качестве примечания, сообщение "loaded + inactive (dead)" означает, что systemd было трудно запустить процесс и в результате он был заброшен. Вы можете вручную проверить, что name.service работает после перезагрузки, используя:

systemctl stop <service-name>
systemctl start <service-name>

Это обновит статус и запустит службу правильно, если информация верна. Затем вы можете снова проверить статус, чтобы увидеть дополнительные детали:

 systemctl status <service-name>
3
27.01.2020, 19:44

Это ошибка в нескольких служебных файлах Debian:

# systemctl enable watchdog
Synchronizing state of watchdog.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable watchdog
# find /etc/systemd/ | grep watch
# tail -n2 /lib/systemd/system/watchdog.service

[Install]

https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=218609&p=1406567#p1406567https://forum.armbian.com/topic/9115-still-dont-know-where-to-report-bugs-watchdogservice-refuses-to-start-due-to-broken-service-file/

Исправление уровня распространения:

echo "WantedBy=default.target" >> /lib/systemd/system/watchdog.service
systemctl daemon-reexec
systemctl enable watchdog
systemctl stop watchdog.service
systemctl start watchdog.service

Существует множество ручных альтернатив этому.

1
27.01.2020, 19:44

Теги

Похожие вопросы