upstart

우분투에서 전통적인 sysvinit 방식 대신에 채택한 구동 스크립트 처리 방식.
(맥에서는 또 다른 대체품으로 launchd를 채택한 바 있다.)

man 5 init 명령을 통해 어떤 문법이 가능한지 살펴볼 수 있는데 구동 방식에 다양한 조건을 부여할 수 있고 그 진행 자체에 대한 통제도 자유로운 편이다.

다음은 사용중인 설정 파일의 내용이다.

Air Video Server

설명대로 따라서 설정하였다. env 부분은, 실행 당시에 로케일이 지정되지 않는지 한글이 깨지길래 직접 환경변수를 직접 지정했다.

순서를 유지하기 위해 후순위 항목은 선순위 항목이 실행되었다는 신호가 떨어지면 실행하도록 했다. 하지만 실제로는 포트 배정이 반대 순서로 되기도 하는데, upstart의 실행 시점과 내부적인 프로세스 구동시간이 맞아 떨어지지 않아 발생하는 선점의 문제로 의심되나 정확한 이유는 모르겠다. 이에 대한 대비책으로 후순위로 실행되어야 할 항목에 pre-start exec sleep 10을 주었는데 이것이 제대로 안 먹는지 포트가 바뀌는 증상은 가끔이지만 여전히 보인다.

/etc/init/airvideo-public.conf
start on runlevel [2345]
stop on stopping network
stop on starting shutdown

env LANG=ko_KR.utf-8

exec sudo -H -n -u keizie /usr/bin/java -jar /opt/AirVideoServer/AirVideoServerLinux.jar /opt/AirVideoServer/public.properties
respawn
/etc/init/airvideo-private.conf
start on started airvideo-public
stop on stopping airvideo-public

env LANG=ko_KR.utf-8

pre-start exec sleep 10
exec sudo -H -n -u keizie /usr/bin/java -jar /opt/AirVideoServer/AirVideoServerLinux.jar /opt/AirVideoServer/private.properties
respawn

VirtualBox

처음에는 설정해봤는데 잘 안 된다는 질문에 올라온 코드를 따라해보았는데, 명령 자체가 실행되지 않거나 혹은 실행되더라도 그걸 호출한 upstart 명령이 종료되질 않았다. 종료가 제대로 되지 않는다는 점 때문에 종료 조건을 검출하는 expect 문법을 종류별로 바꾸어도 보았지만 변화가 없었다.

결국 다음과 같이 실제로 관리되는 프로세스가 없이 시작 전과 종료 후에 실행되는 명령만을 지정해 실제로 구동과 해제를 처리하는 것으로 결론 지었다. 대부분의 안내가 똑같은 명령을 rc.local 등 수동조작 명령을 모아놓는 파일에 써두라고 하는데, 이는 실행만 담당할 뿐 종료 시점을 잡아낼 수가 없다. 종료시에 실행되는 다른 스크립트에 같이 써두는 방법도 있겠지만 그것보다는 독립적으로 관리해주는 것이 좋다고 생각한다.

한 번에 모든 가상머신이 구동을 시작하면 불필요하게 큰 부하가 한 번에 몰릴 것이므로 하나가 끝나면 다음 것이 시작되는 식으로 실행 순서를 부여하였다.

/etc/init/vbox-ie6.conf
start on started vbox-ie7
stop on runlevel [!2345]
pre-start exec sudo -H -n -u keizie VBoxManage startvm IE6 --type headless
post-stop exec sudo -H -n -u keizie VBoxManage controlvm IE6 savestate
/etc/init/vbox-ie7.conf
start on started vbox-ie8
stop on runlevel [!2345]
pre-start exec sudo -H -n -u keizie VBoxManage startvm IE7 --type headless
post-stop exec sudo -H -n -u keizie VBoxManage controlvm IE7 savestate
/etc/init/vbox-ie8.conf
start on started vbox-ie9
stop on runlevel [!2345]
pre-start exec sudo -H -n -u keizie VBoxManage startvm IE8 --type headless
post-stop exec sudo -H -n -u keizie VBoxManage controlvm IE8 savestate
/etc/init/vbox-ie9.conf
start on local-filesystems
stop on runlevel [!2345]
pre-start exec sudo -H -n -u keizie VBoxManage startvm IE9 --type headless
post-stop exec sudo -H -n -u keizie VBoxManage controlvm IE9 savestate

Comments