(/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
로컬로 실행하는 한 가지 가능한 방법은 다음을 사용하는 것입니다.
getenforce
SELinux에서 시행 모드가 활성화되었습니다.
sudo setenforce 0
이를 비활성화하고 허용 모드로 전환하십시오. 이제 서비스가 실행 중입니다.
그러나 이는 프로덕션 환경에서는 권장되지 않습니다.