Eu escrevi um aqui: link
Alguns erros que você cometeu:
- Não deve haver - entre o slapd e suas opções.
- O início dos eventos precisa ter um
and
entre eles. - sistemas de arquivos virtuais devem mudar para o sistema de arquivos, como disse Letizia.
Gostaria de converter o script de inicialização do servidor slapd
LDAP para um serviço Upstart. No entanto, tenho muito pouco conhecimento de scripts de inicialização do SysV (e do material do LSB (?)). Especificamente, estou interessado na capacidade respawn
do Upstart.
O script slapd
init do Ubuntu 14.04 é aqui .
O serviço Upstart que eu criei é aqui .
Migrei coisas suficientes do script sysv? Eu cometi erros? Coisas que eu não entendi do script sysv, não incluí no trabalho do Upstart. Alguém poderia explicar este script de init sysv para mim?
Os arquivos relevantes são publicados em GitHub .
Antecedentes:
Eu tenho alguns servidores LDAP em N-way multi-mestre replicação . Há um bug conhecido que pode estar causando vazamentos de memória, levando aos daemons slapd
ocasionalmente vítima do assassino de OOM.
Minhas opções incluem:
slapd
para respawn (o assunto dessa pergunta). Eu escrevi um aqui: link
Alguns erros que você cometeu:
and
entre eles. De acordo com LSBInitScripts :
$remote_fs all filesystems are mounted. In some LSB run-time environments,
filesystems such as /usr may be remote. If the script need a mounted
/usr/, it needs to depend on $remote_fs. Scripts depending on $remote_fs
do not need to depend on $local_fs. During shutdown, scripts that need to
run before sendsigs kills all processes should depend on $remote_fs.
enquanto de acordo com a página de manual sistemas de arquivos remotos :
When it occurs, local filesystems such as /usr may not be mounted.
For most normal services the filesystem(7) event is sufficient.
Você deve alterar os sistemas de arquivos remotos com o evento do sistema de arquivos que:
The filesystem event is generated by the mountall(8) daemon after it
has mounted all filesystems listed in fstab(5).
Verificação do script de inicialização do SystemV $SLAPD_CONF
. Se não estiver presente nenhum tipo de configuração, o script não iniciará e parará com a saída 0 sem fazer nada.
Esta verificação é útil em caso de reinicialização entre a fase de instalação e a fase de configuração ou durante o procedimento de desinstalação. Para entender seu significado, você deve analisar os scripts prerm
e postrm
em /var/lib/dpkg/info
.
Por exemplo, prerm
tenta parar slapd
e, se falhar, o procedimento unistall também falhará. O procedimento para parar sem o arquivo de configuração retornará 0 para permitir a desinstalação do pacote OpenLDAP
que está instalado, mas não configurado.
A função check_for_no_start()
impede a execução inicial com base na variável $ SLAPD_NO_START ou se o arquivo $ SLAPD_SENTINEL_FILE existir. Esta é uma maneira simples de desativar temporariamente a inicialização de slapd
, para exemplos de manutenção. Mesmo se o servidor for reinicializado, slapd
não será iniciado.
Script SystemV cria $piddir
(se não existe) e dá permissão para $SLAPD_PIDFILE
, isso é necessário porque slapd
vai escrever pid em $SLAPD_PIDFILE
.
Você deve adicionar isso no script pre_start
.
De acordo com a página man do start-stop-daemon :
-S, --start [--] arguments
Check for the existence of a specified process. If such a
process exists, start-stop-daemon does nothing, and exits with
error status 1 (0 if --oknodo is specified). If such a process
does not exist, it starts an instance, using either the
executable specified by --exec or, if specified, by --startas.
Any arguments given after -- on the command line are passed
unmodified to the program being started.
É por isso que você deve remover o comando --
no slapd como o CameronNemo disse.
Finalmente, quando parar, há a opção --retry TERM/10
que significa:
schedule is a list of at least two items separated by slashes
(/); each item may be -signal-number or [-]signal-name, which
means to send that signal, or timeout, which means to wait that
many seconds for processes to exit, or forever, which means to
repeat the rest of the schedule forever if necessary.
Eu acho que o OpendLDAP precisa de um pouco de tempo para desligar, então você deve adicionar a sub-rotina kill timeout 10
, que esperará 10 segundos (em relação ao padrão 5) para enviar slapd
o SIGKILL
.