![[서비스] 아래의 사용자를 systemd의 OnFailure 유닛에 전달하는 방법](https://linux55.com/image/115406/%5B%EC%84%9C%EB%B9%84%EC%8A%A4%5D%20%EC%95%84%EB%9E%98%EC%9D%98%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A5%BC%20systemd%EC%9D%98%20OnFailure%20%EC%9C%A0%EB%8B%9B%EC%97%90%20%EC%A0%84%EB%8B%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
루트가 아닌 특정 사용자로 실행되는 시스템 장치가 있습니다. 이 장치에는 다른 시스템 장치 1개와 OnFailure가 있습니다. 이 OnFailure 유닛에서 ExecStart는 이메일을 보내는 셸 스크립트를 시작합니다. 이 쉘 스크립트에 실패한 원래 시스템 장치의 사용자를 전달하고 싶습니다. 어떻게 해야 하나요?
답변1
인수를 전달할 때 셀을 시작하는 일반적인 방법은 인스턴스를 사용하여 시작한 unit@parameter
다음 셀 내에서 해당 값을 복원하는 것입니다 %I
. 예를 들어 --user
테스트를 위해 파일은 다음과 같습니다 ~/.config/systemd/user/tryfail.service
.
[Unit]
User=otheruser
[email protected]
[Service]
ExecStart=/bin/bash -c 'sleep 3;exit 7'
그리고~/.config/systemd/user/[email protected]
[Unit]
Description=%I Instance of Fail Service
[Service]
ExecStart=/bin/bash -c 'echo got %i'
StandardOutput=journal
지금 주문하세요
systemctl --user daemon-reload
systemctl --user start tryfail
journalctl -f
실패한 서비스가 시작되고 있다는 otheruser
정보가 표시되어야 합니다. 분명히 이것은 User=
테스트에 사용할 때 무시되지만 --user
그것은 중요하지 않습니다.