루트가 아닌 사용자가 사용자 데몬으로 시스템 서비스를 시작하도록 설정하는 방법


20

방금 아치 리눅스 시스템 (2012.09.07)에서 systemd의 설치 및 설정 프로세스를 마쳤습니다. 나는 제거 initscripts(및 구성 파일을 제거).

내가하고 싶은 일은 루트가 아닌 사용자가 시작하고 중지 할 수있는 서비스를 만드는 것입니다. 이 서비스는 rtorrent를 실행하는 분리 된 스크린 세션을 시작하는 것입니다. 그러나이 서비스를 시작 (활성화)하도록 설정 한 시스템의 모든 사용자가 특정 인스턴스를 구체적으로 시작하기를 원합니다. 어떻게하면 될까요?

systemd가 서비스의 사용자 인스턴스를 지원한다는 것을 기억하지만 이것을 설정하는 방법이나 내가 찾는 것과 관련이 있는지에 대한 정보를 찾을 수 없었습니다.

시스템에 사용한 서비스 파일 :

[Unit]
Description=rTorrent

[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent

업데이트 # 1 :

herehere 매뉴얼 페이지를 읽은 후 systemd가 어떻게 더 잘 작동하는지 이해합니다. 특히 User=WorkingDirectory=옵션 을 사용하면 사용자 세션에서 서비스를 시작할 수 있습니다. 그러나 문제는 여전히 사용자 자신이 할 수 없습니다 남아있다 start, stop, enable, 또는 disable서비스. 에 의해 액세스 거부 오류가 발생합니다 systemctl.

업데이트 # 2 :

먼저 systemd의 사용자 세션을 단순화하고 더 잘 사용하기 위해 (아직 불완전한 기능), sofar의 사용자 세션 단위를 사용 하고 구성 조언을 따랐습니다.

현재 버전의 DBus (1.6.4-1) 에는 다음과 함께 명령 오류를 DBUS_SESSION_BUS_ADDRESS사용하여 환경 변수 의미를 설정하지 않는 버그가있는 것 같습니다 systemctl --user.

Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

변수는 다음과 같아야합니다.

DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"

여기서 USERUID 는 주어진 사용자의 UID 여야합니다.


사용자마다 별도의 서비스 파일을 만들고 간단히 활성화 할 수 있다는 것을 알고 있습니다. 그러나 위에서 설명한 방식으로 가능할 수 있는지 알고 싶습니다.
한스

공평하게도, 나는 sudo사용자를 위해 간단한 설정 을 할 수 있었고 위의 의견에서 언급했듯이 자신의 서비스 파일을 제어 할 수있었습니다. 그러나이 솔루션을 통해 사용자는 대부분의 다른 서비스도 제어 할 수 있습니다.
Hans

당신이 읽은 경우는없는 것 sudo-의 설명서 의 sudoers (5) 명령의 인수를 제한에 많은 예제를 가지고 있습니다.
grawity

답변:


19

systemd는 보통 일반 사용자가 시스템 서비스를 시작할 수 없도록합니다. 폴킷을 통한 액세스 제공을 지원하지만 그 부분은 여전히 ​​부족하며 아직 하나의 특정 서비스 만 허용 할 수는 없습니다.

rtorrent는 실제로 시스템 서비스가 아니며 모든 사용자가 자신의 rtorrent 인스턴스를 갖기를 원하기 때문에 systemd의 "user"모드를 실험하십시오.

로그인하면 시스템이 user@<uid>.service시스템 장치를 시작하여 별도의 "-사용자"systemd 인스턴스를 시작합니다. 새로운 사용자-systemd는 (로 시작하는 유닛 파일을 읽을 default.target에서) ~/.config/systemd/user/, /etc/systemd/user//usr/lib/systemd/user/.


1
감사합니다 grawity, 그것은 기본적으로 내가 놓친 것입니다. 그러나 그것은 DBus 문제이기도 한 것으로 나타났습니다 : dbuse DBUS_SESSION_BUS_ADDRESS에 주어진 사용자에 대한 올바른 전역 변수 를 설정하지 않는 버그가있는 것처럼 보이므로 systemctl이 사용자 세션에 액세스 할 수 없으므로 오류가 발생합니다. 이 작은 문제를 알아 내면 다른 모든 것이 아름답게 작동합니다!
한스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.