Mam następujący plik jednostki systemowej w /etc/systemd/system/emacs.service
:
[Unit]
Description=Emacs: the extensible, self-documenting text editor
Documentatin=man:emacs(1) info:Emacs
[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(progn (setq kill-emacs-hook nil) (kill-emacs))"
Restart=always
Environment=DISPLAY=:%i
TimeoutStartSec=0
[Install]
WantedBy=default.target
Chcę, żeby to się zaczęło przy starcie, więc weszłam systemctl enable emacs
Jednak za każdym razem, gdy moja usługa uruchamia się ponownie, systemctl status emacs
pokazuje:
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Ale następnie wprowadzenie systemctl start emacs
i sprawdzenie statusu zwraca:
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2016-11-11 23:03:59 UTC; 4s ago
Process: 3151 ExecStart=/usr/bin/emacs --daemon (code=exited, status=0/SUCCESS)
Main PID: 3154 (emacs)
Tasks: 2
Memory: 7.6M
CPU: 53ms
CGroup: /system.slice/emacs.service
└─3154 /usr/bin/emacs --daemon
Jak mogę uzyskać ten proces, aby pomyślnie uruchomić przy rozruchu?
After=...
wspomniałem.och to jest interesujące.
Wybór losowej jednostki usługowej i wpatrzenie się w nią zależy od konkretnego celu zamiast
default.target
. To drugie jest symboliczne ... skonfigurowane łącze do określonego celu, semantycznie nie ma sensu. (Patrzsystemctl set-default
)To może wyjaśniać, dlaczego usługa wyświetla się
disabled
po włączeniu. Spróbuj zastąpićdefault.target
w pliku usługimulti-user.target
na przykład.(Niezgłaszanie błędu przy niepowodzeniu włączenia wydaje się być defektem w systemie. Prawie zastanawiam się, czy masz teraz katalog
/etc/systemd/system/default.target.wants
).źródło
/etc/systemd/system/default.target.wants
Inside, czyli moje pliki usług. I tak, nie miałem pojęcia, że wystąpił błąd.Masz zmienną środowiskową DISPLAY, co oznacza, że chcesz uruchomić X11. Do tego czasu musisz mieć sposób na zablokowanie usługi.
Odbywa się to za pomocą na
After=...
opcję .Nie zrobiłem tego sam, więc nie mogę powiedzieć, że to zadziała, ale prawdopodobnie ma to coś wspólnego
graphical.target
.Inna możliwość, jeśli serwer X nie uruchomi się natychmiast (tzn. Masz ekran logowania z lightdm lub podobny), możesz
WantedBy=...
zamiast tego użyć :Jeśli masz już dość pracy z systememd, możesz przyjrzeć się zwykłemu sposobowi działania menedżerów X-Windows.
Jest
~/.xprofile
plik, który działa jak~/.bashrc
plik.Są też
~/.config/autostart/*.desktop
pliki. Automatycznie uruchomi się wszystkie zdefiniowane tam aplikacje.Rozwiązania te nie obejmują całego systemu, jednak w przypadku wielu użytkowników każdy z nich musiałby mieć własny wpis. Ponadto nie uruchamia aplikacji jako root, ale Ty.
Na marginesie, komunikat „załadowany + nieaktywny (martwy)” oznacza, że systemd miał trudności z uruchomieniem procesu i w rezultacie postanowił go porzucić . Możesz ręcznie przetestować, czy
name.service
działa po ponownym uruchomieniu, używając:Spowoduje to odświeżenie statusu i prawidłowe uruchomienie usługi, przy założeniu, że informacje są prawidłowe. Następnie możesz ponownie sprawdzić status, aby zobaczyć dodatkowe szczegóły:
źródło
Documentatin
. Twoja wskazówka na tematjournalctl
pomogła mi tutaj.Jest to błąd w kilku plikach serwisowych Debiana:
https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=218609&p=1406567#p1406567 https://forum.armbian.com/topic/9115-still-dont-know-where-to-report -bugs-watchdogservice-odmawia uruchomienia ze względu na uszkodzony plik usługi /
Poprawka poziomu dystrybucji to
Istnieje wiele ręcznych alternatyw tego rozwiązania.
źródło