우분투 service 등록16.04 기준
- 서비스 파일 작성
# 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
- 작성한 서비스 활성화
# systemctl enable <myservice>
- 서비스 시작
# 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