루트가 아닌 사용자로 시스템 서비스를 실행하십시오!


18

다음 서비스 amos.service를 만들었으며 amos (amos 그룹의 구성원)로 실행해야합니다.

[Unit]
Description=AMOS Service
After=network.target

[Service]
User=amos
Group=amos
Type=simple
WorkingDirectory=/usr/share/amos
ExecStart=/usr/share/amos/amos_service.sh start
ExecStop=/usr/share/amos/amos_service.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

모든 권한에 설정된 /usr/share/amosamos:amos

amos_service.sh는 다음과 같습니다.

#!/bin/bash

CUDIR=$(dirname "$0")
cd /usr/share/amos

start() {
  exec /usr/share/amos/run_amos.sh >> /var/log/amos.log 2>&1  
}

stop() {
  exec pkill java 
}

case $1 in
  start|stop) "$1" ;;
esac

cd "$CURDIR"

루트에 속하는 디렉토리를 수정하지 않고 서비스를 처음으로 실행하고 User not Group 매개 변수가없는 amos.service를 실행하면 모든 것이 잘 작동합니다!

디렉토리 권한을 amos : amos로 변경하고 amos.service User & Group을 추가하면 서비스가 작동하지 않으며 다음과 같은 결과가 나타납니다. 첨부 된 이미지 참조

서비스를 실행 한 후 오류


/var/log/amos.log에 기록 된 메시지와 관련하여 성공 사례와 실패 사례의 차이점은 무엇입니까?
sourcejedi

또한이 구성은 /var/log루트가 소유 한 것이 이상 합니다. 나는 당신이 /var/log/amos/amos가 소유 한대로 생성 한 디렉토리를 사용하고 싶다고 생각합니다 .
sourcejedi

언급 한대로 만들고 결과를 다시 기록합니다
itprguy

답변:


11

체계화 된 사용 :

journalctl -xe서비스를 시작한 후 문제 사용을 표시합니다 .

bash 스크립트가 필요하지 않습니다. 서비스 파일에 넣으십시오.

ExecStart=/usr/share/amos/run_amos.sh

ExecStopsystemd는 모든 자식 프로세스를 중지 시킬 필요가 없습니다 . 로 출력을 볼 수 있습니다 journalctl -u amos.service.


4
ExecStart 다음에 "="가 있어야합니다. 편집 내용이 6 자 미만이므로 문제를 해결할 수 없습니다.
Mark Stosberg

5

간단한 대신 포크를 원한다고 생각합니다. Simple은 프로세스가 종료되지 않는다고 가정하고 프로세스가 종료되면 프로세스를 죽은 상태라고합니다.

amos_service.sh 스크립트를 제거하고 기능을 amos.service에 넣기를 원할 것입니다.


제안 된대로 변경 할 것입니다 ... 그것에 대해 읽고 있었고 의견을 보았습니다. 결과를 다시 기록합니다.
itprguy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.