250x250
syk531
하루
syk531
전체 방문자
오늘
어제
  • 분류 전체보기 (166)
    • 개발 (166)
      • java (11)
      • kotlin (7)
      • spring, spring boot (35)
      • Javascript (4)
      • Tyhmeleaf (2)
      • Kafka (17)
      • Docker (8)
      • Kubernetes (3)
      • Elastic Stack (4)
      • react native (3)
      • Web (4)
      • GIS (3)
      • 리눅스 (16)
      • Windows (2)
      • 네트워크 (2)
      • 안드로이드앱 (5)
      • git (2)
      • Tool (15)
      • 프로젝트 (7)
      • 백준알고리즘 (14)
      • DB (2)

인기 글

최근 글

블로그 메뉴

    공지사항

    태그

    • 뉴스앱
    • 티스토리챌린지
    • 오블완

    최근 댓글

    티스토리

    hELLO · Designed By 정상우.
    syk531

    하루

    개발/리눅스

    리눅스 서비스 등록 에러 해결: code=exited, status=203/EXEC 문제 해결법

    2024. 11. 11. 13:33
    728x90
    반응형

    리눅스(CentOS7) 환경에서 서비스로 쉘스크립트를 실행하게 등록할때 code=exited, status=203/EXEC 에러가 발생하였습니다.

     

    쉘스크립트 생성과 서비스 등록은 아래와 과정으로 진행했습니다.

    1. 실행할 쉘스크립트 생성

    /usr/local/bin/myscript.sh 파일을 생성하고 내용은 아래와 같이 텍스트를 출력하게 작성하였습니다.

    echo "My script is running"

     

    2. 실행권한 부여

    쉘스크립트가 실행 가능하도록 권한을 설정했습니다.

    chmod +x /usr/local/bin/myscript.sh

     

    3. systemd 유닛 파일 작성

    systemd 서비스 유닛 파일을 생성했습니다.

    이 파일은 /etc/systemd/system/ 디렉토리에 .service 확장자로 작성합니다.

    vi /etc/systemd/system/myscript.service

    파일 내용은 아래와 같습니다.

    [Unit]
    Description=My Custom Script Service
    After=network.target
    
    [Service]
    ExecStart=/usr/local/bin/myscript.sh
    Restart=on-failure
    User=root
    Group=root
    
    [Install]
    WantedBy=multi-user.target

     

    각 섹션의 설명은 다음과 같습니다.

    • [Unit]:
      • Description: 서비스에 대한 설명을 작성합니다.
      • After: 이 서비스가 network.target 이후에 시작되도록 설정합니다. (네트워크가 준비된 후 실행되도록 보장)
    • [Service]:
      • ExecStart: 실행할 쉘 스크립트의 전체 경로를 지정합니다. 여기에는 추가적인 옵션도 사용할 수 있습니다.
      • Restart: 서비스가 비정상적으로 종료되었을 때 자동 재시작 설정입니다. on-failure는 오류 발생 시에만 재시작하게 합니다.
      • User 및 Group: 서비스를 실행할 사용자와 그룹을 지정합니다. root 계정으로 쉘스크립트를 작성해서 root로 설정합니다.
    • [Install]:
      • WantedBy: 서비스가 어느 타겟에서 활성화될지 지정합니다. multi-user.target은 일반적으로 다중 사용자 모드에서 활성화됨을 의미합니다.

     

    4. systemd 데몬 재로드

    유닛 파일을 새로 작성하거나 수정한 후에는 systemd 데몬을 재로드하여 변경 사항을 반영해야 합니다.

    sudo systemctl daemon-reload

     

    5. 서비스 시작 및 자동 시작 및 상태 확인

    작성한 유닛 파일을 바탕으로 서비스를 시작하고 상태를 확인 합니다.

    systemctl start myscript.service
    systemctl status myscript.service

     

    상태를 확인하니 아래와 같이 에러가 발생하였습니다.

    ● myscript.service - My Custom Script Service
       Loaded: loaded (/etc/systemd/system/myscript.service; disabled; vendor preset: disabled)
       Active: failed (Result: start-limit) since 월 2024-11-11 13:00:15 KST; 1s ago
      Process: 19769 ExecStart=/usr/local/bin/myscript.sh (code=exited, status=203/EXEC)
     Main PID: 19769 (code=exited, status=203/EXEC)

    에러 코드 status=203/EXEC는 systemd가 실행 파일을 찾거나 실행할 수 없을 때 발생합니다. 보통 파일 경로나 실행 권한에 문제가 있을 때 발생한다고 하는데 제 경우에는 해당하지 않아서 다른 문제원인들을 확인해보니 스크립트 파일 맨 위에 #!/bin/bash와 같이 해석할 쉘을 명시하지 않으면 실행이 안될 수도 있다는 내용을 확인했습니다.

     

    기존 쉘스크립트는 아래와 같이 작성되있었습니다.

    echo "My script is running"

    해당 쉘스크립트를 아래와 같이 수정했습니다. 

    #!/bin/bash
    echo "My script is running"

     

    그리고 systemd 데몬 재로드 후 서비스를 시작하니 아래와 같이 정상 실행되었습니다.

    systemctl daemon-reload
    systemctl start myscript.service
    systemctl status myscript.service
    11월 11 13:03:18 localhost systemd[1]: Started My Custom Script Service.
    11월 11 13:03:18 localhost myscript.sh[19856]: My script is running
    728x90
    반응형
    저작자표시 (새창열림)

    '개발 > 리눅스' 카테고리의 다른 글

    systemd 서비스 status=127 에러 해결 방법: 환경 변수 설정하기  (0) 2024.11.13
    Systemd 서비스 시작 문제 해결하기: 쉘스크립트로 프로세스 유지하는 방법  (0) 2024.11.12
    CentOS 부팅 오류 해결: 파티션 오류 수정 방법  (0) 2024.08.12
    [CentOS7] yum 명령어 오류 해결 (Could not resolve host: mirrorlist.centos.org; 알 수 없는 오류)  (4) 2024.07.03
    [CentOS7] [Spring Boot] [WebSocket] WebSocket Server 연결안되는 현상  (0) 2024.06.13
      '개발/리눅스' 카테고리의 다른 글
      • systemd 서비스 status=127 에러 해결 방법: 환경 변수 설정하기
      • Systemd 서비스 시작 문제 해결하기: 쉘스크립트로 프로세스 유지하는 방법
      • CentOS 부팅 오류 해결: 파티션 오류 수정 방법
      • [CentOS7] yum 명령어 오류 해결 (Could not resolve host: mirrorlist.centos.org; 알 수 없는 오류)
      syk531
      syk531
      기억을 위해 기록을.

      티스토리툴바