오류 해결

[Linux / 서버] Systemctl 서비스 생성 시 실행(ExecStart) 오류

cob 2024. 11. 7. 15:17

 

1. Issue

서버에 서비스를 생성하고, 특정 쉘스크립트를 실행시킬 때 발생

 

 

 

2. Problem

아래 코드는 생성한 서비스이고, ExecStart를 사용해 쉘 스크립트를 실행시키려고 할 때 발생하였다.
[Unit]
Description=SCM-Manager Server
After=syslog.target network.target

[Service]
Type=simple

User=scm
Group=scm

WorkingDirectory=/home/was/scm/dev-scm-server
ExecStart=/home/was/scm/dev-scm-server/bin/scm-server
Restart=on-failure

# Exit code 143 means that the program received a SIGTERM signal to instruct it to exit,
# but it did not handle the signal properly.
# we suppress that warning for now
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

 

 

2-1) 오류 확인 

# 시스템 로그
journalctl -xe

오류

 

 

3. Solution

해당 로그에는 SELinux에서 엑세스하지 못하기 때문에 발생한 오류라며 접근을 허용하기 위해서 정책 추가하라고 나왔지만 해당 스크립트의 SELinux 컨텍스트를 먼저 확인한다.

 

object_r:bin_t 또는 bin_exec_t 와 같은 컨텍스트가 설정되어 있어야 한다.
# 컨텍스트 확인
ls -Z /home/was/scm/dev-scm-server/bin/scm-server

 

난 아래와 같이 user_home_t로 등록되어 있었다.

설정

 

 

3-1) SELinux 컨텍스트 변경

# 컨텍스트 변경
sudo chcon -t bin_t /home/was/scm/dev-scm-server/bin/scm-server

# 영구적으로 변경
sudo restorecon -v /home/was/scm/dev-scm-server/bin/scm-server

 

변경 후 재조회

 

 

 

해당 설정을 변경했으면 다시 만들었던 서비스를 실행하면 된다.

반응형