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

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

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

[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/amos모든 권한이 다음으로 설정되었습니다 .amos: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"

처음 서비스를 실행했을 때 디렉터리는 수정되지 않았습니다. 즉, 루트 디렉터리에 속했고 amos.service에는 "그룹이 아닌 사용자" 매개변수가 없었으며 모든 것이 잘 실행되었습니다!

디렉터리 권한을 amos:amos로 변경하고 amos.service 사용자 및 그룹을 추가하면 서비스가 작동하지 않고 다음 메시지가 표시됩니다. 첨부된 이미지를 참조하세요.

서비스 실행 시도 후 오류 발생

답변1

시스템을 사용하십시오:

문제를 표시하려면 journalctl -xe서비스를 시작한 후 사용하십시오.

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

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

아니요 ExecStop, systemd는 모든 하위 프로세스를 중지합니다. 를 사용하여 출력을 볼 수 있습니다 journalctl -u amos.service.

답변2

나는 당신이 단순보다는 포크를 원한다고 생각합니다. Simple은 프로세스가 종료되지 않았다고 가정하므로 종료되면 프로세스 종료를 호출합니다.

amos_service.sh 스크립트를 제거하고 해당 기능을 amos.service에 넣을 수 있습니다.

답변3

먼저 다음 명령을 사용하여 변경하려는 구성을 찾으십시오.

systemctl list-unit-files

그런 다음 다음 명령을 사용하여 특정 구성을 변경합니다.

sudo systemctl edit --full tomcat9.service

그러면 환경 변수에 설정된 기본 텍스트 편집기에서 파일이 열립니다 EDITOR.

이제 특정 사용자 및 그룹 사용자 서비스 섹션을 추가하십시오.

답변4

amos활성화-링거 옵션을 통해 사용자에게 서비스를 시작할 수 있는 권한을 부여할 수 있을까요?

loginctl enable-linger amos

(보다남자 로그인, 이는 필수인 것 같습니다)

관련 정보