systemctl --user 명령을 루트로 실행

systemctl --user 명령을 루트로 실행

systemctl --user조직을 관리하려면 루트가 필요합니다 .

이제 user1systemd 사용자 단위를 설정했습니다. 사용자가 터미널이나 GUI, SSH를 통해 직접 로그인하면 모든 systemctl --user명령어를 실행할 수 있다.

사용자가 로그인되어 있는 동안 루트로 다음 명령을 실행하고 systemctl --user문제 없이 해당 사용자에 대한 모든 명령을 실행할 수 있습니다.

su - user1 -c "systemctl --user status myunit.service"

그러나 사용자가 로그아웃하면 systemctl --user루트를 포함한 누구도 해당 사용자로 명령을 실행할 수 없습니다. 나는 계속해서 얻을 것이다

Failed to connect to bus: No such file or directory

루트로 실행 하더라도 sudo - user1충분하지 않으며 동일한 오류가 발생합니다. 사용자의 조직을 관리하려면 사용자가 실제로 로그인해야 합니다.

분명히 이것은 알려진 "문제"입니다(시스템이 설계된 대로 작동할 때 참조됨).

노트:s에서 환경 변수 설정을 시도했지만 XDG_RUNTIME_DIR도움이 되지 않았습니다.user1bashrc

다른 사용자가 해결 방법을 찾은 것 같지만 작동하지 않습니다. 개발자가 자신을 승인하지 않는 것 같습니다.아이디어.

내가 찾은 유일한 해결 방법은 사용자 계정에 SSH로 접속하고 공개 키로 인증한 후 다음과 같은 명령을 실행하는 것입니다.

ssh user1@localhost -f 'systemctl --user status myunit.service'

SSH 연결이 필요하지 않은 해결 방법을 찾고 있습니다. 사용자가 로그인하지 않은 경우 시스템 사용자 단위를 관리하려면 루트가 필요합니다. 어떻게 이를 달성할 수 있나요?

답변1

시스템 248-M username@(2021년 3월 출시) 다른 사용자를 지정하기 위한 구문 지원이 도입되었습니다.

$ sudo systemctl --user -M user1@ status myunit.service

참조: 문서에 나열된 새로운 기능정보

(이 솔루션은 작동하기 위해 실행할 필요가 없습니다 loginctl enable-linger user1)

답변2

su또는 를 사용하는 대신 sudo이를 사용 machinectl하면 올바른 사용자 세션과 컨텍스트를 얻을 수 있습니다.

su/ 에서 했던 것처럼 셸에 직접 넣을 수 있습니다 sudo.

machinectl shell [email protected]

...특정 사용자의 컨텍스트에서 원하는 것을 실행하거나 cmd를 전달하여 다음과 같은 추가 인수로 실행할 수 있습니다.

machinectl shell [email protected] $(which bash) -c "systemctl --user status myunit.service"

$(which bash) -c를 따옴표로 묶지 않도록 주의하세요.

답변3

나는 실제로 사용자가 실제로 로그인하지 않고도 이 작업을 수행할 수 있는 매우 깔끔한 방법을 찾아냈습니다. 루트 사용자에 대해 링거를 활성화하려면 loginctl을 사용해야 합니다.

loginctl enable-linger user1

그러면 상태를 확인할 수 있어요

loginctl user-status user1

여기에는 시스템 프로세스에서 사용자가 실행하는 모든 프로세스가 나열되어야 합니다. 이제 사용자가 실제로 로그인하지 않고도 루트로 실행할 수 있습니다.

runuser -l user1 -c 'systemctl --user status myunit.service'

관련 정보