Ubuntu 12.04의 init 스크립트에서 시작 작업에 의존하는 방법


10

Ubuntu 12.04 LTS를 사용하고 있으며이 시스템은 주로 시작 작업을 사용합니다. 불행히도 내 시스템은 수동으로 컴파일 된 dbmail 서버에 의존 합니다.이 서버는 init 스크립트 만 있지만 시작 스크립트는 없습니다.

사용 update-rc.d dbmail defaults나는 모든 런레벨에 대한 dbmail를 설치하지만, MySQL은 최대되기 전에 데몬이 다시 죽는 불행하게도 그것은 시작됩니다. 또한 S90 등으로 옮기려고했지만 스크립트를 실행할 때 여전히 MySQL을 사용할 수 없습니다.

다음과 같이 스크립트의 LSB 헤더에 종속성을 추가하려고 시도했습니다.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          dbmail
# Required-Start:    $local_fs $remote_fs $syslog $network mysql
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start dbmail services
# Description:       Run network services provided by dbmail such as
#                    imap-server, pop3-server, lmtp-server, timsieve-server
### END INIT INFO

불행히도 스크립트는 MySQL이 시작되기 전에 시작된 것으로 보입니다. 나는 일을 시작하지 않는 오래된 faited init 스크립트에 익숙하기 때문에 약간 혼란 스럽습니다. 종속성을 추가하거나 init 스크립트 mysql전에 작업을 시작하려면 dbmail어떻게해야합니까?

부팅하는 동안 작업 + 초기화 스크립트의 시작 순서를 확인 / 확인하려면 어떻게해야합니까? 이를위한 도구가 있습니까?

MySQL이 이미 실행 중이므로 시작 후 쉘에서 수동으로 스크립트를 시작하면 정상적으로 작동합니다.


추악한 해결 방법으로 작동 한 것은 init 스크립트의 "start ()"함수에 "sleep 3"을 추가하는 것이 었습니다. 그러나 더 깨끗한 방법이 필요합니다. 경쟁 조건을 남용하는 것이므로 올바른 방법으로 수정하고 싶습니다.
Martin C.

답변:


12

/etc/init.d/dbmail start에서 실행하면 /etc/rc.local모든 시작 작업 / 기타 초기화 스크립트 후에 시작됩니다.

그러나에 새로운 시작 작업을 추가하여이 문제를 해결했을 것입니다 /etc/init/dbmail.conf. 일반적으로 init.d 스크립트에는 상태 등을 검사하기위한 많은 코드가 있으며, 이는 시작시 처리합니다. 다음과 같이 간단 할 수 있습니다.

start on started mysql
exec /usr/local/bin/dbmail

또는 다음과 같이 기존 init 스크립트를 사용할 수 있습니다.

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.