예상대로 작동하는 시스템 사용자 서비스가 있습니다. 다음과 같이 시작됩니다.
systemctl start test@user
문제는 여러 사용자를 위해 타이머에서 이 서비스를 실행해야 한다는 것입니다. 타이머 자체에서 사용자를 지정하거나 @ 기호를 사용하여 사용자 이름을 전달하는 방법은 없는 것 같습니다.
타이머는 다음과 같습니다.
[Unit]
Description=Test (runs once every 24 hours)
[Timer]
OnUnitActiveSec=24h
Persistent=true
[email protected]
[Install]
WantedBy=timers.target
나를 혼란스럽게 하는 것은 "Unit="에 무엇을 넣어야 하는가입니다. "를 입력하면[이메일 보호됨]"작동하겠지만 항상 단일 사용자로 실행되므로 다중 사용자 서비스를 사용할 수 없습니다."[이메일 보호됨]"는 타이머를 시작하지만 "systemctl status test@user"는 타이머가 1분 간격으로 설정된 경우에도 항상 비활성 상태임을 보여줍니다.
주어진 시스템 서비스의 실행 중인 모든 인스턴스를 나열하는 방법을 잘 모르기 때문에 타이머가 "@user" 없이 서비스를 실행할 때 "test@" 서비스가 다른 사용자로 실행되고 있는지 알 수 없습니다.
타이머를 사용하여 사용자 서비스를 시작하는 올바른 방법은 무엇입니까? 이상적으로는 사용자가 자신의 서비스와 해당 서비스와 관련된 타이머를 만들고 관리할 수 있어야 합니다.
답변1
이것이 귀하의 요구 사항을 충족합니까?
systemctl --user start unit.service
답변2
다음과 같이 타이머 내에서 서비스를 시작해 보세요.
Unit=test@%u.service
sytemd.unit(5)
지정자의 맨페이지 에서 %u
:
Service Manager 인스턴스를 실행하는 사용자의 이름입니다. 시스템 관리자인 경우 "루트"로 확인됩니다. 이 설정은 서비스 단위에서 구성 가능한 항목의 영향을 받지 않습니다.