Eu tenho o seguinte arquivo de unidade systemd em /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
Quero que isso inicie na inicialização, por isso entrei systemctl enable emacs
No entanto, cada vez que meu serviço é reiniciado, systemctl status emacs
mostra:
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Mas, em seguida, inserir systemctl start emacs
e verificar o status retorna:
● 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
Como posso obter esse processo para iniciar com êxito na inicialização?
After=...
mencioná-lo.ooh isso é interessante.
Escolher uma unidade de serviço aleatória e encará-la depende de um alvo específico em vez de
default.target
. O último é simbólico ... um link configurado para um destino específico, semanticamente, não faz sentido. (Vejasystemctl set-default
)Isso pode explicar por que seu serviço é exibido
disabled
depois que você o habilita. Tente substituirdefault.target
no seu arquivo de serviço pormulti-user.target
, por exemplo.(Não relatar um erro ao falhar em ativar parece um defeito no systemd. Quase me pergunto se você agora tem um diretório
/etc/systemd/system/default.target.wants
).fonte
/etc/systemd/system/default.target.wants
Inside que é meus arquivos de serviço. E sim, eu não tinha ideia de que havia algum erro.Você tem uma variável de ambiente DISPLAY, ou seja, deseja que o X11 seja iniciado. Então, você precisa ter uma maneira de bloquear seu serviço até então.
Isso é feito usando a
After=...
opção .Eu não fiz isso sozinho, então não posso dizer que funcionaria, mas provavelmente é algo a ver com isso
graphical.target
.Outra possibilidade, se o servidor X não iniciar imediatamente (ou seja, você tiver uma tela de login com lightdm ou algo semelhante), poderá ser necessário
WantedBy=...
:Se você se cansar de fazê-lo funcionar com o systemd, convém observar a maneira usual de os gerentes do X-Windows fazerem o trabalho.
Existe o
~/.xprofile
arquivo, que funciona como o~/.bashrc
arquivo.Há também os
~/.config/autostart/*.desktop
arquivos. Ele iniciará automaticamente quaisquer aplicativos definidos lá.Essas soluções não são abrangentes ao sistema, no entanto, caso você tenha vários usuários, cada um deles deverá ter sua própria entrada. Além disso, ele não inicia o aplicativo como root, mas você.
Como observação lateral, a mensagem "carregado + inativo (inoperante)" significa que o sistema teve dificuldades para iniciar o processo e, como resultado, decidiu abandoná- lo. Você pode testar manualmente se
name.service
funciona depois de reiniciar usando:Isso atualizará o status e iniciará o serviço corretamente, assumindo que as informações estejam corretas. Você pode verificar o status novamente para ver detalhes adicionais:
fonte
Documentatin
. Sua dica sobrejournalctl
me ajudou aqui.É um bug em vários arquivos de serviço do Debian:
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-recusa-iniciar-devido-a-quebrado-service-file /
A correção do nível de distribuição é
Existem muitas alternativas manuais para isso.
fonte