[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 옵션을 사용해야한다.


참고자료