Centos/RHEL 8 시스템 서비스는 사용자 정의 위치의 스크립트를 참조할 수 없습니다.

Centos/RHEL 8 시스템 서비스는 사용자 정의 위치의 스크립트를 참조할 수 없습니다.

(/usr/local/bin..이 아닌) 위치에 존재하는 간단한 스크립트에 대한 시스템 서비스를 만들려고 합니다.

아래 스크립트는/home/vagrant/temp/test.sh

#!/bin/sh

MAX=500
i=0;
while true
do
i=$((i+1));
sleep 2
echo "$i = $(date)"
if [ $i == $MAX ]; then
  exit 0;
fi;
done;
fi

나는 이라는 간단한 usr-print.service서비스를 만들었습니다 /etc/systemd/system/. 파일의 내용은 다음과 같습니다

[Unit]
Description=Simple print service
After=network.target

[Service]

Type=simple
Restart=always
StandardOutput=journal
StandardError=journal

ExecStart=/home/vagrant/temp/test.sh

[Install]
WantedBy=multi-user.target

서비스를 시작하는 데 사용할 때 systemctl daemon-reload; systemctl start usr-print.service다음 예외가 발생합니다.

● usr-print.service - Simple print service
   Loaded: loaded (/etc/systemd/system/usr-print.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2021-08-02 06:10:39 UTC; 7s ago
  Process: 1504 ExecStart=/home/vagrant/temp/test.sh (code=exited, status=203/EXEC)
 Main PID: 1504 (code=exited, status=203/EXEC)

Aug 02 06:10:39 localhost.localdomain systemd[1]: usr-print.service: Main process exited, code=exited, status=203/EXEC
Aug 02 06:10:39 localhost.localdomain systemd[1]: usr-print.service: Failed with result 'exit-code'.
Aug 02 06:10:39 localhost.localdomain systemd[1]: usr-print.service: Service RestartSec=100ms expired, scheduling restart.
Aug 02 06:10:39 localhost.localdomain systemd[1]: usr-print.service: Scheduled restart job, restart counter is at 5.
Aug 02 06:10:39 localhost.localdomain systemd[1]: Stopped Simple print service.
Aug 02 06:10:39 localhost.localdomain systemd[1]: usr-print.service: Start request repeated too quickly.
Aug 02 06:10:39 localhost.localdomain systemd[1]: usr-print.service: Failed with result 'exit-code'.
Aug 02 06:10:39 localhost.localdomain systemd[1]: Failed to start Simple print service.

그러나 스크립트를 이동하고 usr-print.service 파일을 업데이트하면 ExecStart=/usr/local/bin/test.sh서비스가 예상대로 시작됩니다.

/home/vagrant/temp/test.sh서비스 파일의 경로를 사용하는 방법이 있나요 ?

Centos 7 - ExecStart=/home/vagrant/temp/test.sh서비스 파일 작업 중(셸 실행 중)

Centos/RHEL 8 - ExecStart=/home/vagrant/temp/test.sh서비스 파일이 작동하지 않습니다.

고쳐 쓰다:

SELinux에는 실행 권한이 있지만 스크립트를 실행할 수 없는 것 같습니다.

SELinux is preventing /usr/lib/systemd/systemd from execute access on the file /home/vagrant/temp/test.sh.
                                                              
*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that systemd should be allowed execute access on the user-print-service file by default.
    Then you should report this as a bug.
    You can generate a local policy module to allow this access.
    Do allow this access for now by executing:
       # ausearch -c '(-service)' --raw | audit2allow -M my-service
       # semodule -X 300 -i my-service.pp

Redhat에서 이와 관련된 티켓을 발견했습니다.https://bugzilla.redhat.com/show_bug.cgi?id=1832231

답변1

로컬로 실행하는 한 가지 가능한 방법은 다음을 사용하는 것입니다.

getenforceSELinux에서 시행 모드가 활성화되었습니다.

sudo setenforce 0이를 비활성화하고 허용 모드로 전환하십시오. 이제 서비스가 실행 중입니다.

그러나 이는 프로덕션 환경에서는 권장되지 않습니다.

관련 정보