Systemd: Serviço de inicialização automática após o mongodb

2

ubuntu16.04.1, systemd

Uma aplicação depende do mongodb. O aplicativo e o mongodb iniciam na inicialização como serviços. app.service contém a próxima linha:

After=network.target mongod.service
Infelizmente, o aplicativo falha (com conexão com o erro do banco de dados), eu acho, porque o mongodb precisa de algum tempo para ser inicializado e estar pronto para conexões (se eu iniciar o aplicativo mais tarde, tudo ficará bem).

Parece que Type=notify (em [Service] seção de mongod.service ) resolverá o problema se o mongodb enviar uma notificação apropriada para o systemd. Mas eu não encontrei nenhuma documentação sobre isso.

A queston é, como autoinicializar o aplicativo, após o mongodb estar pronto para conexões de entrada.

    
por Vladimir Gamalyan 19.08.2016 / 18:07

2 respostas

2

Eu tive um problema semelhante ... Eu queria lançar o Mongo-Connector assim que o MongoDB estivesse pronto para aceitar a conexão.

Encontrei a correção depois de pesquisar um pouco. A correção foi adicionar a seguinte linha ExecStartPost após a linha ExecStart no arquivo de unidade mongodb.

ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
ExecStartPost=/bin/sh -c 'while ! /usr/bin/mongo --eval "db.version()" > /dev/null 2>&1; do sleep 0.1; done'

Isso é testado no meu servidor Ubuntu 16.04 com sucesso.

    
por 09.01.2017 / 09:02
1

Para referência futura, eu encontrei esta solução para trabalhar: link Dessa forma mongodb bloqueia até o banco de dados é alcançável antes do systemd iniciar o próximo serviço. E isso não envolve um sono.

If you have services that depend on mongodb, the config is slightly more difficult because the default mongodb service returns before the database is online. That can cause quick applications to try and fail to connect to the database. To prevent this, add the following to /etc/mongod.conf:

processManagement:
    fork: true

Next, create /etc/systemd/system/mongod.service.d/mongod.conf (which extends the existing /lib/systemd/system/mongod.service) with the following content:

[Service]
Type=oneshot
RemainAfterExit=yes

That causes sudo systemctl start mongod to start the server in a forked process and return only AFTER the database is up and ready for connections. This way, dependent services only get invoked after the db is live.

    
por 14.09.2018 / 15:50