방금 아치 리눅스 시스템 (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 :
here 및 here 매뉴얼 페이지를 읽은 후 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
사용자를 위해 간단한 설정 을 할 수 있었고 위의 의견에서 언급했듯이 자신의 서비스 파일을 제어 할 수있었습니다. 그러나이 솔루션을 통해 사용자는 대부분의 다른 서비스도 제어 할 수 있습니다.
sudo
-의 설명서 의 sudoers (5) 명령의 인수를 제한에 많은 예제를 가지고 있습니다.