본문으로 바로가기
728x90
반응형

목차

     

    개요 

    (추후 작업할 때 참고할 용도로 작성하는 글이다.)

     

    systemd? 왜 쓰는가?

      EC2에서는 Django, Flask, FastAPI 혹은 Daemon을 실행시키기 위해서는 system daemon을 이용해야한다. 이는 linux os에서 특정 프로그램을 상시 가동시킬 수 있게 만들어준다. (단순히 코드를 실행시키는 main.py만 실행시키고 terminal session을 종료하면 같이 종료된다)

     

    1. Service File

    Service File은 대략 다음과 같이 생겼다.

    [Unit]
    Description=PROJECT SERVICE 
    After=network.target
    
    [Service]
    User=ec2-user
    WorkingDirectory=/project
    LimitNOFILE=4096
    Environment="PATH=/project/venv/bin:$PATH"
    ExecStart=/project/venv/bin/python application.py
    Restart=on-failure
    RestartSec=5s
    
    [Install]
    WantedBy=multi-user.target%

    주의해서 볼건 "WorkingDirectory", "Enviormenet", "ExecStart" 부분이다.

     

    필자 나름의 이해한 내용대로 적어보자면 다음과 같다

    • "WorkingDirectory"는 service가 어떤 경로를 root directory로 삼을 것인지를 설정하는 부분이다.
    • "Enviorment"는 어떤 환경(바이너리 혹은 기타 경로)이 system path에 등록되어야 하는지에 대한 부분이다.
    • "ExecStart" 는 service 실행 시 어떤 명령을 실행할 것인지 에 대한 부분이다.

    주의할점은 만약 상황에 따라 바이너리 파일 경로의 위치를 바꾼 경우 해당 경로를 Enviorment에 등록해야한다는 점이다. 

     

    2. Service File 등록하기

    system daemon을 실행하기 위해서는 먼저 *.service 파일이 다음 위치에 있어야 한다.

    $ /etc/systemd/system/

    이후 아래 명령으로 system daemon을 등록할 수 있다.

    $ systemctl enable [SERVICE_FILE]

    예시를 하나 들어보자 만약 example.service 라는 파일이 "/etc/systemd/system"안에 위치한다고 가정해보자. 그렇다면 다음과 같이 명령을 사용하는 것이다.

    $ systemctl enable example

     

     

    3. Service File 기본 명령

    앞서 등록한 service file을 실행시키려면 다음과 같은 명령을 사용하면 된다

    $ systemctl start example

    재실행은 다음과 같다.

    $ systemctl restart example

    이제 유추할 수 있겠지만 정지는 다음과 같다.

    $ systemctl stop example

     

     

    4.  Service 잘 돌아가고 있는가 ?

    service file을 실행시키고 그 상태를 보는 명령은 다음과 같다.

    $ systemctl status example

    만약 모종의 이유로 service가 잘 돌아가고 있지 않다면 다음과 같은 결과가 나올 것이다.

    성공한 경우는 다음과 같다.

     

     

    5. 기타

    service file이 수정된 경우 다음과 같이 reload 시키고 재시작하자.

    $ systemctl daemon-reload
    $ systemctl restart example
    728x90
    반응형