Upstart

기존 Unix “System V”에 있던 init 시스템을 대체하기 위한 프로그램 입니다. init을 대체할 뿐만 아니라 다양한 기능을 제공 합니다 또한, upstart는 이벤트 기반으로 동작하기 때문에 설정 내용에 따라서 init 뿐만 아니라 cron, atd, anacron을 대체 할 수도 있으며 inetd와 유사하게 설정도 가능합니다.

예제로 알아보는 job 설정

  • 기본적으로 upstart의 job 설정파일은 /etc/init 아래에 존재 합니다
  • 상세한 내용보다는 즉시 써먹을 만한 간단한 설정에 대해서 소개 합니다

예제 : tty1 설정 파일

# tty1 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345] and (
            not-container or
            container CONTAINER=lxc or
            container CONTAINER=lxc-libvirt)

stop on runlevel [!2345]

respawn
exec /sbin/getty -8 38400 tty1
JOB 파일의 문법은 직관적 형태를 띄고 있습니다. ### start on / stop on 먼저 start on, stop on에 대해서 살펴보면 뒤에 지시되는 이벤트에 대해서 각각 시작, 정지를 하도록 지정하는 내용입니다. upstart는 관리자가 직접 시작/종료 처리를 해 줄 수도 있지만 JOB 파일에 지정한 이벤트에 따라서 자동으로 시작/종료가 가능합니다. start on/stop on 뒤에는 보통 아래와 같은 이벤트 지시지가 따라 붙습니다
start on startup
start on runlevel [23]
start on stopped rcS
start on started tty1
  • startup : 시스템이 부팅할 때를 의미합니다 (보통 start on과 같이 쓰임)
  • runlevel : 뒤에 지정 된 런레벨을 의미합니다. 만약 [!23] 으로 설정되었다면 2,3 런레벨을 제외한 나머지 경우를 의미합니다. 런레벨은 0~6,S가 올 수 있습니다.
  • stopped : 뒤에 지정 된 JOB이 종료 되었을 때를 의미합니다.
  • started : 뒤에 지정 된 JOB이 시작 되었을 때를 의미합니다.
  • shutdown : 시스템 종료할 때를 의미합니다. (보통 stop on과 같이 쓰임)

respawn

이 지시자가 있으면 해당 프로세스가 죽었을 경우 (또는 crash 되었을 경우) 자동으로 프로세스를 다시 실행시켜 줍니다.

exec

실제 서비스가 시작될 때 실행하는 내용을 담고 있습니다. 위 예제에서는 /sbin/getty를 실행하도록 되어있습니다.

이 외에도 많은 설정 방법이 존재하는데 Upstart Cookbook을 참고하시면 됩니다.

Upstart 명령

Upstart 명령은 아래와 같습니다. init system을 대체하기 때문에 init과 동일한 이름의 명령도 존재 합니다.

서비스 제어 (service 명령으로도 바꿔서 사용할 수 있습니다)

  • initctl - service 명령의 대체 명령으로 사용이 가능합니다. 보통 initctl [JOB이름] [명령] 형태로 사용합니다
  • start - 서비스 시작
  • stop - 서비스 종료
  • reload - SIGHUP 시그널을 전송합니다.
  • restart - JOB설정파일을 읽지 않고 서비스를 재시작 합니다
  • status - 서비스 상태 확인
  • 예제
    $ initctl console stop
    
    
    initctl을 통해서 console JOB을 종료한다 $ stop console
    console JOB을 종료한다 $ start serial
    serial JOB을 실행한다

리부팅 / 시스템 종료

  • halt - 시스템을 종료 후 전원을 OFF합니다
  • poweroff - halt와 동일합니다.
  • reboot - 시스템을 재부팅합니다.
  • shutdown - 시스템을 종료합니다.

그 외의 명령 (직접 실행 할 일은 없음)

  • init - Upstart 프로세스 관리 데몬
  • runlevel - 기존 runlevel 호환성을 위한 명령
  • telinit - 기존 runlevel 호환성을 위한 명령
  • upstart-udev-bridge - Upstart와 Udev간의 연계를 위한 명령

그 외

  • initctl list 명령으로 현재 upstart로 관리되는 프로세스의 상태를 모두 확인 할 수 있습니다.
  • 환경변수로 지정 된 값에 대해서 수동으로 시작/종료 할 경우에는 명령 뒤에 옵션으로 지정할 수 있습니다
    예시) initctl serial stop 을 실행했을 경우
    $ initctl serial stop
    stop: Unknown parameter: DEV

수동으로 실행 할 경우에는 DEV 변수 값이 필요하기 때문에 아래와 같이 실행합니다. $ initctl serial stop DEV=ttyS0

References