nfancurve.service
로그인할 때마다 사용자 서비스가 실행되기를 원합니다 . 이전에는 명령을 사용하여 서비스를 활성화했지만 systemctl --user enable nfancurve.service
새 세션(재부팅 포함)을 시작할 때마다 서비스가 활성화되었음에도 불구하고 실행되지 않았습니다. 로그인 후 다음 명령을 실행하여 이를 확인했습니다.
name@machine:~$ systemctl --user is-active nfancurve.service
inactive
name@machine:~$ systemctl --user is-enabled nfancurve.service
enabled
name@machine:~$ systemctl --user start nfancurve.service
name@machine:~$ systemctl --user is-active nfancurve.service
active
다음은 상태 로그입니다 systemctl --user status nfancurve.service
.
● nfancurve.service - Nfancurve service
Loaded: loaded (/usr/lib/systemd/user/nfancurve.service; enabled; vendor preset: enabled)
Active: inactive (dead)
완전한 정보를 얻으려면 이 서비스는 다음에서 제공됩니다.이 저장소, AUR에서 설치했습니다. 파일 .service
은 다음과 같습니다.
[Unit]
Description=Nfancurve service
After=graphical-session.target
Requires=graphical-session.target
[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT
[Install]
WantedBy=graphical-session.target
마지막 줄을 다음으로 변경해 보았지만 WantedBy=default.target
재부팅하고 로그인한 후에도 서비스가 여전히 시작되지 않습니다. 내 데스크톱 환경은 xfce입니다 graphical-session.target
.
로그인할 때마다 자동으로 시작되도록 하려면 어떻게 해야 합니까?
답변1
너무 길어요.
로 변경 .WantedBy=graphical-session.target
WantedBy=default.target
가설
[Install]
귀하의 문제가 서비스 파일 섹션 에 있다고 생각됩니다 . 시스템 장치의 경우 multi-user.target
설치에 따라 괜찮을 수 있지만 사용자 장치의 경우 동등한 설치는 입니다 default.target
. 보다systemd.special(7) 맨페이지더 알아보기.
| system target | near-equivalent user target |
|-------------------|-----------------------------|
| multi-user.target | default.target |
| graphical.target | graphical-session.target |
관심을 가질 만한 다른 목표는 graphical-session-pre.target
또는 입니다 xdg-desktop-autostart.target
.
기본.targetMVCE
다음은 Debian 11 시스템에서 방금 시도한 최소한의 예입니다.
서비스 파일:
$ systemctl --user cat simpleuser.service
# /home/stew/.config/systemd/user/simpleuser.service
[Unit]
Description=Simple User Service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
[Install]
WantedBy=default.target
나는 그것을 설치했다:
$ systemctl --user enable simpleuser.service
Created symlink /home/stew/.config/systemd/user/default.target.wants/simpleuser.service → /home/stew/.config/systemd/user/simpleuser.service.
다시 시작하면 서비스가 활성화된 것을 볼 수 있습니다.
$ systemctl --user status simpleuser.service
● simpleuser.service - Simple User Service
Loaded: loaded (/home/stew/.config/systemd/user/simpleuser.service; enabled; vendor preset: enable>
Active: active (exited) since Sun 2020-07-12 10:12:54 CEST; 13min left
Process: 1127 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1127 (code=exited, status=0/SUCCESS)
Jul 12 10:12:54 stewbian systemd[1106]: Starting Simple User Service...
Jul 12 10:12:54 stewbian systemd[1106]: Finished Simple User Service.
하위 상태를 알고 싶다면 다음 과 같은 것을 (exited)
사용하면 얻을 수 있습니다 .Type=simple
ExecStart=/bin/sleep infinity
(running)
그래픽 세션 목표 질문
버그 보고서에서 귀하의 문제를 발견했습니다.깃허브에서.
graphic-session.target 기반으로 설치하는 경우 시작되지 않을 수 있습니다. 나는 이것을 KDE/i3 설정에서 실행하고 기본 Gnome3 설정에서 재현했습니다.
$ systemctl --user status graphical-session.target
● graphical-session.target - Current graphical user session
Loaded: loaded (/usr/lib/systemd/user/graphical-session.target; static; vendor preset: disabled)
Active: inactive (dead)
Docs: man:systemd.special(7)
DE가 의도한 대로 실제로 이를 달성하지 못하는 것 같습니다. 이 경우에는 을 사용하십시오 WantedBy=default.target
. 귀하의 스크립트는 GUI 기반인 것처럼 보이지 않으므로 default.target
괜찮을 것입니다. 그렇지 않으면 섹션 After=graphical.target
에서 사용하는 것을 고려할 수 있습니다 [Unit]
.
~에 따르면systemd.special(7) 맨페이지, DE(예: ) graphical-session.target
여야 합니다 . 이런 식으로 Gnome이 시작되면 graphic-session.target이 발생합니다. dbus 객체를 검사해 보면, 이를 발생시키는 대상과 아무런 관계가 없음을 분명히 알 수 있습니다.BoundBy=
{gnome,kde,xfce}-session.target
$ busctl introspect --user org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/graphical_2dsession_2etarget \
org.freedesktop.systemd1.Unit
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.ActiveState property s "inactive" emits-change
.After property as 2 "simpleuser.service" "basic.target" const
.Before property as 1 "shutdown.target" const
.BindsTo property as 0 const
.BoundBy property as 0 const
.Conflicts property as 1 "shutdown.target" const
.ConsistsOf property as 2 "gnome-terminal-server.service" "duns… const
.Description property s "Current graphical user session" const
.Documentation property as 1 "man:systemd.special(7)" const
.LoadState property s "loaded" const
.Names property as 1 "graphical-session.target" const
.PartOf property as 0 const
.RequiredBy property as 0 const
.Requires property as 1 "basic.target" const
.SubState property s "dead" emits-change
.UnitFilePreset property s "disabled" -
.UnitFileState property s "static" -
.WantedBy property as 0 const
.Wants property as 1 "simpleuser.service" const
나는 메일링 리스트를 조사한 결과 {gnome,kde,xfce}-session.target
이 제안이 불과 4년 전에 gnome, kde 및 xfce에서 이러한 *.target
파일을 보내도록 하기 위해 만들어졌다는 것을 발견했습니다. 이런 일은 아직 일어나지 않았습니다. 그러므로 기록이 있어도 불완전하다. 따라서 아직은 사용하면 안 됩니다 graphical-session.target
.
답변2
마침내 해결책을 찾았습니다(Stuart와 다른 사람들에게 감사드립니다). 원래 서비스 파일을 변경했습니다.
[Unit]
Description=Nfancurve service
After=graphical-session.target
Requires=graphical-session.target
[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT
[Install]
WantedBy=graphical-session.target
Requires 행을 제거하고 by( 및 행 포함 ) graphical-session.target
의 모든 인스턴스를 대체합니다 . 결과적으로 현재 서비스 파일이 생성됩니다.default.target
After
WantedBy
[Unit]
Description=Nfancurve service
After=default.target
[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT
[Install]
WantedBy=default.target
이제 컴퓨터를 시작하고 로그인하면 서비스가 활성화됩니다.
답변3
.service 파일은 다음과 같아야 합니다.
[Unit]
Description=Spark service
[Service]
ExecStart=/path/to/spark/sbin/start-all.sh
[Install]
WantedBy=multi-user.target
이제 .service 파일을 활성화하고 사용하려면 몇 가지 단계를 더 수행하세요.
- myfirst.service라는 이름으로 /etc/systemd/system 폴더에 넣습니다.
- 스크립트가 실행 가능한지 확인하세요.
chmod u+x /path/to/spark/sbin/start-all.sh
- 시작하세요:
sudo systemctl start myfirst
- 시작 시 실행되도록 설정합니다.
sudo systemctl enable myfirst
- 멈추다:
sudo systemctl stop myfirst