systemctl --user
조직을 관리하려면 루트가 필요합니다 .
이제 user1
systemd 사용자 단위를 설정했습니다. 사용자가 터미널이나 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
도움이 되지 않았습니다.user1
bashrc
다른 사용자가 해결 방법을 찾은 것 같지만 작동하지 않습니다. 개발자가 자신을 승인하지 않는 것 같습니다.아이디어.
내가 찾은 유일한 해결 방법은 사용자 계정에 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'