[Linux] systemd service Type 옵션에서 simple과 oneshot 차이
systemd service의 Type 옵션 중에서 simple과 oneshot의 차이를 정리해보자.
환경
- Linux
- systemd
목표
- 평소에 모호했던 systemd service의 Type 옵션중 하나인 simple과 oneshot의 차이에 대해 직접 정리해본다.
- 이 포스트에서 systemd나 service에 대해서는 정리하지 않습니다.
- Reference를 참고해 작성하였습니다.
systemd service type
simple
[Service]
Type=simple
- 메인 프로세스가 시작되면 바로 systemd unit이 정상적으로 실행되었다고 판단하고
active
상태로 바꾼다. 실행된 메인 프로세스가 끝날때까지 기다려주지 않고 연결된 다음 systemd unit을 실행한다. 만약 네트워크를 다 올리는 작업같이 기다렸다가 다음 systemd unit을 실행해야하는 상황이면 다른 옵션과 함께 사용하던가 아래oneshot
을 이용해야 한다. ExecStart=
를 하나만 가질 수 있다.- 프로세스가 실행되면
active
상태가 되며 다 끝났을때inactive
가 됩니다.
oneshot
[Service]
Type=oneshot
- 메인 프로세스가 시작되면 상태를
activating
으로 바꾸고 끝나때까지 기다리며 해당 메인 프로세스가 끝나야지만 다음 systemd unit으로 넘어간다. ExecStart=
를 여러개 가질 수 있다.- 프로세스가 실행되면
activating
상태가 되며 프로세스가 다 끝나고inactive
상태로 바뀐다. 만약,RemainAfterExit=true
옵션을 사용하면 프로세스가 다 끝났을때inactive
가 아닌active
상태가 된다.(실행되고 있는 프로세스는 없을수도 있다!)
둘의 공통점
forking
된 프로세스에 대해서는 신경쓰지 않으며 자식 프로세스를 생성하고 싶다면forking
옵션을 사용해야한다.