시스템 유닛 파일을 사용자 수준에서 작성할 때 고려할 사항

3459 단어 systemdtech

개시하다


시스템은 전체 시스템 시작과 사용자 레벨 시작 두 종류로 나뉜다.
Shell
(sudo) systemctl <SUB_COMMAND> <SERVICE_NAME> # system-wide
systemctl --user <SUB_COMMAND> <SERVICE_NAME> # user-level
유닛 파일*.service을 쓸 때 전체 시스템에서 문제가 없지만 사용자 수준에서 사용할 수 없거나 제대로 시작할 수 없는 파일이 있기 때문에 미리 요약합니다.

User/Group을 사용할 수 없습니다.


전체 시스템에서 수호 프로세스를 시작할 사용자를 지정하기 위해 User 또는 Group를 사용할 수 있지만 사용자 레벨에서는 사용할 수 없습니다.
[Service]
User=ubuntu
Group=ubuntu

발생한 문제


위 항목을 사용자 수준에서 작성하면 다음 오류가 발생합니다.
Log
foo.service: Failed to determine supplementary groups: Operation not permitted
foo.service: Failed at step GROUP spawning /usr/bin/env: Operation not permitted

해결책

User 또는 Group만 삭제하면 됩니다.
삭제한 후 데몬을 다시 불러오는 것을 잊지 마십시오.
Shell
systemctl --user daemon-reload
https://unix.stackexchange.com/questions/438064/failed-to-determine-supplementary-groups-operation-not-permitted

multi-user.target 사용 불가


전체 시스템WantedBy에서 때때로 지정multi-user.target되지만 사용자 레벨에서도 사용할 수 없습니다.
[Install]
WantedBy=multi-user.target

발생한 문제


이것을 써도 수호 프로세스를 시작할 수 있지만, 자동 시작이 효력이 발생하더라도 시스템이 시작될 때 수호 프로세스의 자동 시작은 효력이 발생하지 않습니다.

해결책


대체 사용 가능default.target.
[Install]
WantedBy=default.target
참고로 상기 오류를 수정할 때 자동 시작을 유효하게 설정하면 잠시 비활성화하고 다시 사용해야 합니다.물론 수호 프로세스를 다시 불러와야 합니다.
Shell
systemctl --user daemon-reload
systemctl --user disable <SERVICE_NAME>
systemctl --user enable <SERVICE_NAME>
올바르게 추가되었는지 확인하기 위해 다음 명령을 실행합니다.
Shell
systemctl --user list-dependencies default.target
https://github.com/systemd/systemd/issues/2690#issuecomment-186973730

좋은 웹페이지 즐겨찾기