Como depender de um trabalho inicial de um script init no Ubuntu 12.04


10

Estou usando o Ubuntu 12.04 LTS e este sistema usa principalmente trabalhos iniciantes. Infelizmente, meu sistema também depende de um servidor dbmail compilado manualmente , que possui apenas um script init, mas nenhum script inicial.

Usando update-rc.d dbmail defaultseu instalei o dbmail para todos os níveis de execução, mas, infelizmente, ele foi iniciado antes da inicialização do MySQL; portanto, o daemon morre novamente. Eu também tentei movê-lo para o S90 ou similar, mas o MySQL ainda não está disponível quando o script é executado.

Tentei adicionar uma dependência ao cabeçalho LSB do script, da seguinte maneira:

#!/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

Infelizmente, o script ainda parece ter sido iniciado antes do MySQL. Estou acostumado a scripts init antiquados, não para iniciar trabalhos, por isso estou um pouco confuso aqui. Como posso adicionar a dependência ou como posso iniciar o mysqltrabalho antes do dbmailscript init?

Como posso verificar / ver a ordem de início das tarefas + scripts init durante a inicialização? Existe uma ferramenta para isso?

Lançar o script manualmente a partir de um shell após a inicialização funciona bem, pois o MySQL já está em execução.


O que funcionou como uma solução alternativa feia foi adicionar um "sleep 3" na função "start ()" do script init. Mas precisa haver uma maneira mais limpa, isso está apenas abusando de uma condição de corrida e eu realmente gostaria de corrigir isso da maneira correta.
Martin C.

Respostas:


12

Eu acho que se você executar /etc/init.d/dbmail starta partir /etc/rc.local, ele vai começar depois de todos os seus trabalhos arrivista / outros scripts de inicialização.

No entanto, eu provavelmente corrigiria isso adicionando um novo trabalho inicial em /etc/init/dbmail.conf. Geralmente, os scripts init.d têm muito código para verificar o status etc., que o iniciante trata por você. Pode ser tão simples quanto:

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

Ou, você provavelmente pode usar o script init existente como este:

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.