bash 스크립트를 실행하려면 "system" 사용자를 사용하여 systemd 서비스를 시작하세요.

bash 스크립트를 실행하려면 "system" 사용자를 사용하여 systemd 서비스를 시작하세요.

테스트 목적으로 systemd 서비스 파일은 간단한 bash 스크립트를 실행하도록 설계되었습니다. "시스템" 사용자가 서비스를 시작하길 원합니다. bash 스크립트는 이 시스템 사용자가 소유하고 있으며 실행 권한이 부여되었습니다.

서비스 파일은 간단합니다.

[Unit]
Description=Come one step closer
After=network-online.target
Requires=network-online.target

[Service]
User=test1
Group=test1
Type=simple
ExecStart=/usr/bin/bash /absolute/path/to/test.sh

[Install] 
WantedBy=multi-user.target

test.sh 스크립트는 단순히 Journalctl에 메시지를 보내야 합니다. 이는 테스트 전용입니다.

다음을 사용하여 시스템 단위 파일을 다시 로드했습니다.

$ sudo systemctl daemon-reload

서비스를 시작합니다.

$ sudo systemctl start tester.service

systemctl status tester.service의 출력은 bash를 실행할 권한이 없음을 나타냅니다.

시스템에 "시스템" 사용자 test1을 추가했습니다.

$ sudo useradd -r -s /usr/bin/bash test1 -U

test1 사용자에게 서비스 시작 권한을 부여하려면 어떻게 해야 합니까? test1이 시스템 사용자이고 test1로 로그인할 수 없기 때문에 사용자 test1을 사용하여 bash 스크립트를 테스트할 수 없습니다.

답변1

설명에서 확인된 것처럼 문제는 /absolute/path/to/test.sh루트가 아닌 사용자가 스크립트에 액세스하려면 "실행"(x) 권한이 있어야 하는 위 디렉터리의 권한에 있습니다.

이는 다음 명령을 사용하여 각 상위 디렉터리의 패턴을 살펴봄으로써 진단할 수 있습니다.

ls -ld / /absolute /absolute/path /absolute/path/to /absolute/path/to/test.sh

그리고 "test1" 사용자에게 스크립트 자체에 대한 읽기 권한 외에 모든 디렉터리에 대한 실행 권한이 있는지 확인하세요 test.sh.

관련 정보