[Ubuntu] Systemd Service 등록

우분투 service 등록16.04 기준


  1. 서비스 파일 작성

    # vi /etc/systemd/system/<myservice>.service[doc]

    Ex “<myservice>.service”

    [Unit]
    Description=Poratiner Service
    Requires=docker.service
    After=docker.service
    
    [Service]
    Type=simple
    ExecStart=/opt/portainer/portainer
    
    [Install]
    WantedBy=default.target
  2. 작성한 서비스 활성화

    # systemctl enable <myservice>

  3. 서비스 시작
    # systemctl start <myservice> 
    or
    # service <myservice> start

 


[Unit]

Description=
해당 유닛에 대한 상세한 설명을 포함한다.
Requires=
상위 의존성을 구성한다. 필요 조건으로서, 이 목록이 포함하는 유닛이 정상적일 경우 유닛이 시작된다.
Before=, After=
유닛 시작의 전후 관계를 설정한다. 해당 설정은 “Requires=” 설정과는 독립적이다. “Before=” 에 나열된 유닛이 시작되기 전에 실행하고 “After=” 은 해당 유닛이 시작된 이후 나열된 유닛이 실행한다. 시스템 종료 시에는 반대 순서로 동작한다.

 

[Service]

Type=[simple|forking|oneshot|notify|dbus]
유닛 타입을 선언한다.

  • “simple” (기본값) – 유닛이 시작된 경우 즉시 systemd는 유닛의 시작이 완료됐다고 판단한다. 다른 유닛과 통신하기 위해 소켓을 사용하는 경우 이 설정을 사용하면 안된다.
  • “forking” – 자식 프로세스 생성이 완료되는 단계까지를 systemd가 시작이 완료되었다고 판단하게 된다. 부모 프로세스를 추적할 수 있도록 PIDFile= 필드에 PID 파일을 선언해 주어야 한다.
  • “oneshot” – “simple” 과 다소 유사하지만 단일 작업을 수행하는데 적합한 타입이다. 또한 실행 후 해당 실행이 종료되더라도 RemainAfterExit=yes 옵션을 통해 유닛을 활성화 상태로 간주할 수 있다.
  • “notify” – “simple” 과 동일하다. 다만 유닛이 구동되면 systemd에 시그널을 보낸다. 이때 시그널에 대한 내용은 libsystemd-daemon.so에 선언되어 있다.
  • “dbus” – D-Bus에 지정된 BusName 이 준비될 때까지 대기한다. 다시 말해서, D-Bus가 준비된 후에 유닛이 시작되었다고 간주한다.
ExecStart=
시작 명령을 정의한다. 실행 명령어는 반드시 절대 경로 또는 변수(${STRINGS}와 같이)로 시작해야 하며, 다중 명령어를 지원한다. 예제는 아래와 같다.
ExecStart=”commnad1″
ExecStart=”command2″
ExecStart=”command3″
혹은 ExecStart=”command1; command2; command3″

[Install]

WantedBy=, RequiredBy=
“systemctl enable” 로 유닛을 등록할 때 등록에 필요한 유닛을 지정한다. 해당 유닛을 등록하기 위한 종속성 검사 단계로 볼 수 있다. 따라서 해당 설정은 [Unit] 섹션의 “Wants=” 와 “Requires=” 옵션과 관계 있다.

 

더 많은 옵션들 : http://www.potatogim.net/wiki/Systemctl

 

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.