다음과 같은 시스템 단위 파일이 있습니다 /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
부팅 시 시작되기를 원했기 때문에 다음을 입력했습니다.systemctl enable emacs
그러나 서비스가 다시 시작될 때마다 다음 systemctl status emacs
이 표시됩니다.
● emacs.service - Emacs: the extensible, self-documenting text editor
Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
Active: inactive (dead)
그러나 systemctl start emacs
상태를 입력하고 확인하면 다음이 반환됩니다.
● 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
부팅 시 이 프로세스를 성공적으로 시작하려면 어떻게 해야 합니까?
답변1
이유는 모르겠지만 제대로 작동하도록 하려면 다음을 수행합니다.
삭제됨Environment=DISPLAY=:%i
User=
변수 를 추가했습니다
올바른 파일이 있는지 확인하십시오 /etc/systemd/system/emacs.service
(하드 링크 이전).
그리고 재실행systemctl enable emacs
이렇게 하면 작동합니다.
편집하다
여기서 진짜 문제는 3행에 오타가 있다는 것입니다.
Documentatin
를 확인하면서 알게 되었습니다 journalctl
. stderr에 오류가 전송되지 않으므로 systemd 스크립트에 문제가 있는 사람이라면 누구나 동일한 작업을 수행하는 것이 좋습니다.
답변2
DISPLAY 환경 변수가 있습니다. 이는 X11을 시작한다는 의미입니다. 따라서 그때까지는 서비스를 차단할 수 있는 방법이 필요합니다.
이는 다음을 사용하여 수행됩니다.After=...
옵션.
제가 직접 해본 적이 없어서 효과가 있을 것이라고는 말씀드릴 수 없지만 graphical.target
.
[Unit]
After=graphical.target
또 다른 가능성은 X 서버가 즉시 시작되지 않으면(예: lightdm 등의 로그인 화면이 있는 경우) 다음을 사용해야 할 수도 있다는 것입니다.WantedBy=...
대신에:
[Unit]
WantedBy=graphical.target
systemd로 작업하는 데 지쳤다면 X-Windows 관리자가 작업을 수행하는 일반적인 방법을 살펴보고 싶을 수도 있습니다.
~/.xprofile
파일 처럼 작동하는 파일이 있습니다 ~/.bashrc
.
문서 도 있습니다 ~/.config/autostart/*.desktop
. 정의된 모든 응용 프로그램이 자동으로 시작됩니다.
그러나 이러한 솔루션은 시스템 전체에 적용되지 않으며, 사용자가 여러 명인 경우 각 사용자는 자신만의 항목을 가지고 있어야 합니다. 또한 응용 프로그램을 루트로 시작하지 않고 사용자로 응용 프로그램을 시작합니다.
참고로 "loaded + inactive (dead)" 메시지는 systemd가 프로세스를 시작하는 데 어려움을 겪었음을 의미하므로 결정되었습니다.포기하다그것. name.service
다음 명령을 사용하여 재부팅 후 작동하는지 수동으로 테스트할 수 있습니다 .
systemctl stop <service-name>
systemctl start <service-name>
이것은 것이다새로 고치다정보가 정확하다고 가정하면 상태와 서비스가 올바르게 시작됩니다. 그런 다음 상태를 다시 확인하여 추가 세부정보를 확인할 수 있습니다.
systemctl status <service-name>
답변3
서비스를 활성화한 후 링크가 어디에 있는지 확인하세요. 이에 대한 내 생각을 추가하면 됩니다. 실행하면 sudo systemctl enable myserevice.service
폴더에 링크가 생성되지만 multi-user.target.wants
실제 링크에는 생성되지 않습니다 multi-user.target.wants
. 동일한 이름의 새 폴더에 생성됩니다. WantedBy=multi-user.target
내 텍스트 편집기에 일부 추가 문자가 표시되지 않습니다. 그래서 나는 그것이 무엇인지 모릅니다. 다른 .service 파일에서 c/p를 사용하고 다시 활성화했는데 이제 링크가 올바른 폴더에 있습니다.
답변4
이것은 여러 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#p1406567 https://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
수동으로 대체할 수 있는 방법이 많이 있습니다.