시스템 사용자 모드에서 서비스 비활성이 멈춤

시스템 사용자 모드에서 서비스 비활성이 멈춤

현재 RHEL 7.9를 사용하고 있는데 systemctl 사용자 모드를 활성화하고 다음과 같은 파일을 생성해야 합니다.[이메일 보호됨]이것은 문제가 아니지만 다음 가이드 링크를 따라가는 것으로 생각되었습니다.https://serverfault.com/questions/936985/cannot-use-systemctl-user-due-to-failed-to-get-d-bus-connection-permission

테스트 서비스를 만들었습니다.

[Unit]
Description=Foo

[Service]
ExecStart=/home/glcmsd/test.sh

[Install]
WantedBy=multi-user.target

test.sh어디

#!/bin/bash
sleep 2h

그럼 난 달려

systemctl daemon-reload --user
systectl start test --user
systemctl enable test --user

서비스가 잘 작동하고 있어요

-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 10:14:38 BST; 5s ago
Main PID: 97445 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─97445 /bin/bash /home/glcmsd/test.sh
└─97446 sleep 2h

그런 다음 sudo restart를 실행했는데 서비스 상태를 확인했을 때 이미 비활성 상태였습니다.

-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: inactive (dead)

이것을 디버깅하는 방법이나 내가 뭘 잘못하고 있는지에 대한 단서가 있습니까?

편집: rhel 8.2에서 동일한 테스트를 수행했는데 가이드를 따를 필요가 없었고 동일한 결과를 얻었습니다.

EDIT2: 답변해 주셔서 감사합니다. 매우 도움이 되었습니다. Torin의 솔루션을 사용해 보았지만 RHEL 8.2에서는 작동하지만 7.9에서는 작동하지 않습니다. 이는 8.2의 구현입니다.

$ cat /home/glcmsd/.config/systemd/user/test.service
[Unit]
Description=Foo

[Service]
ExecStart=/home/glcmsd/test.sh

[Install]
WantedBy=default.target

$ systemctl stop test --user
$ systemctl disable test --user
Removed /home/glcmsd/.config/systemd/user/multi-user.target.wants/test.service.
$ systemctl daemon-reload --user
$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; disabled; vendor preset: enabled)
Active: inactive (dead)

Apr 08 12:10:52 npc027161 systemd[2187]: Started Foo.
Apr 08 13:23:08 npc027161 systemd[2187]: Stopping Foo...
Apr 08 13:23:08 npc027161 systemd[2187]: Stopped Foo.
$ systemctl start test --user
$ systemctl enable test --user
Created symlink /home/glcmsd/.config/systemd/user/default.target.wants/test.service → /home/glcmsd/.config/systemd/user/test.service.
[glcmsd@npc027161 ~]$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 13:24:59 BST; 27s ago
Main PID: 16291 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─16291 /bin/bash /home/glcmsd/test.sh
└─16292 sleep 2h

Apr 08 13:24:59 npc027161 systemd[2187]: Started Foo.
$ sudo reboot
#################################################################################
[glcmsd@npc027161 ~]$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 13:27:16 BST; 5s ago
Main PID: 1798 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─1798 /bin/bash /home/glcmsd/test.sh
└─1801 sleep 2h

Apr 08 13:27:16 npc027161 systemd[1777]: Started Foo.
[glcmsd@npc027161 ~]$

이는 7.9와 동일한 구현입니다.

-bash-4.2$ cat /home/glcmsd/.config/systemd/user/test.service
[Unit]
Description=Foo
[Service]
ExecStart=/home/glcmsd/test.sh

[Install]
WantedBy=default.target
-bash-4.2$ vi /home/glcmsd/.config/systemd/user/test.service
-bash-4.2$ systemctl stop test --user
-bash-4.2$ systemctl disable test --user
Removed symlink /home/glcmsd/.config/systemd/user/multi-user.target.wants/test.service.
-bash-4.2$ systemctl daemon-reload --user
-bash-4.2$
-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; disabled; vendor preset: enabled)
Active: inactive (dead)
-bash-4.2$ systemctl start test --user
-bash-4.2$ systemctl enable test --user
Created symlink from /home/glcmsd/.config/systemd/user/default.target.wants/test.service to /home/glcmsd/.config/systemd/user/test.service.
-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 13:29:46 BST; 20s ago
Main PID: 3369 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─3369 /bin/bash /home/glcmsd/test.sh
└─3370 sleep 2h
-bash-4.2$ sudo reboot
#################################################################################
-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: inactive (dead)

EDIT3: 지금은 rhel7.9의 사용자 모드에서 systemd 사용을 포기합니다. 시스템 버전 간에 몇 가지 차이점이 있음을 발견했습니다. Rhel 7.9의 시스템은 219이고, 8.2의 시스템은 239입니다. systemd239는 2개의 서비스를 생성하여 사용자 모드를 허용하는 것으로 보이며, 그 중 하나는 부팅 지연을 활성화하는 것입니다. 다른 하나는 사용자를 위한 런타임 디렉터리를 생성합니다. 239에는 실행 가능한 런타임 디렉터리도 있지만 219에는 존재하지 않는 것을 확인했습니다. 지금 무엇을 해야할지 모르겠습니다. 마지막 편집 내용이 정확하지 않은 경우 죄송합니다. 나중에 추가 정보로 업데이트하겠습니다.

답변1

multi-user.target시스템 대상이므로 원하는 것이 아닐 수도 있습니다.

~에서systemd.special(7):

특수 사용자 유닛

systemd가 사용자 인스턴스로 실행되면 다음 특수 단위를 사용할 수 있습니다.

기본 대상
이는 사용자 세션의 기본 목표이며 기본적으로 시작됩니다. 일반 사용자 세션을 구성하는 다양한 서비스를 이 대상으로 가져와야 합니다.이런 점에서 default.target은 시스템 인스턴스의 multi-user.target과 유사하지만 별칭이 아닌 실제 단위입니다.

또한 다음 단위는 해당 시스템의 단위와 유사하게 정의됩니다:exit.target, shutdown.target,sockets.target,timers.target,paths.target, bluetooth.target,printer.target, smartcard.target, sound. 표적.

그래서 당신은 그것으로 전환하고 싶을 것입니다 WantedBy=default.target.

관련 정보