CentOS의 내 서비스는 구성 파일의 특정 사용자로 실행되도록 구성되어 있습니다 /etc/systemd/system
.
[Service]
User=buildman
빌드맨일 때 su
다음을 실행할 수 있습니다.
systemctl status myservice.service
start
하지만 or 를 실행하려고 하면 stop
비밀번호를 묻는 메시지가 나타납니다.
만약 내가한다면:
sudo systemctl status myservice.service
이미 구성했기 때문에 메시지가 표시되지 않습니다 visudo
.
%buildman ALL= NOPASSWD: /bin/systemctl * myservice.service
그런데 왜 서비스가 중지되고 상태처럼 작동하기 시작하지 않습니까? Buildman이 sudo나 비밀번호 없이 이러한 서비스 명령을 실행할 수 있기를 바랍니다.
주된 이유는 Jenkins에서 서비스를 다시 시작해야 하고 실행하려면 "TTY"가 필요하다고 불평하는 컨테이너에서 sudo를 실행하는 데 문제가 있기 때문입니다.
답변1
start/stop
와 의 차이점은 시스템 상태가 변경되지 않는다는 status
것입니다 .status
시스템 전체의 상태 또는 구성을 수정하려면 시스템 전체의 관리 권한이 필요합니다. 즉, sudo입니다. 서비스의 "상태"를 읽는 것은 읽기 전용 작업이므로 일반적으로 보호되지 않습니다.
사용자 서비스에는 sudo가 필요하지 않다는 점은 주목할 가치가 있습니다. 예를 들어
systemctl --user start bobsburgers
bob에 의해 방출되면 성공하지만, bob에 의해서만 성공합니다. (루트 서비스가 아니기 때문에 루트에서는 이 서비스를 시작할 수 없습니다.)
따라서 여기서 관심 있는 서비스가 시스템 전체 상태를 변경하지 않는 경우 해당 서비스를 사용자 서비스로 설치할 수 있습니다.
systemctl --user enable bobsburgers
표준 구성은 서비스 파일을 ~/.config/systemd/user
.
답변2
status
이 명령을 실행하는 데에는 수퍼유저 권한이 필요하지 않습니다 sudo
.
start
그리고 stop
정말 필요합니다 sudo
. 비밀번호 입력을 피할 수 있지만 sudo를 지정하지 않아도 됩니다.