Como posso iniciar um serviço systemd somente após o mysql ter iniciado?

14

Estou trabalhando em um projeto que é um EmailServer mono. Tentei adicionar um serviço ao systemd para que ele seja iniciado automaticamente durante a inicialização, mas estou tendo um problema.

Eu criei o script e adicionei /lib/systemd/system/emailserver.servicee, em seguida, execute ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service.

Em seguida, executei systemd reload-daemonseguido por systemctl start emailserver.servicee, quando corro ps -ef |grep -i emailserver, posso ver que mono EmailServer.exeestá funcionando, tudo com bom aspecto até agora.

No entanto, quando eu reinicio o servidor no /var/log/messagesarquivo, ele contém a seguinte mensagem de erro

Jul 16 19:41:02 dev-server systemd[1]: emailserver.service holdoff
time over, scheduling restart. Jul 16 19:41:02 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:03 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:04 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:04 dev-server systemd[1]: emailserver.service start request
repeated too quickly, refusing to start.

No meu script mailserver.service, tenho o seguinte

[Unit]
Description=Boardies Email Server Startup Script

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

Estou usando o OpenSuse 12.1

O que estou fazendo de errado, obrigado por qualquer ajuda que você puder fornecer.

ATUALIZAÇÃO Descobri o que está causando o programa parar de funcionar na inicialização, mas não tenho certeza de como posso corrigir esse problema. Meu programa depende de um banco de dados MySQL e acho que meu programa está iniciando antes do MySQL iniciar, como posso fazer o meu serviço não carregar até que o MySQL tenha sido iniciado.

Boardy
fonte
Você deve ter um olhar para alguns exemplos, por exemplo: en.gentoo-wiki.com/wiki/Systemd ou wiki.archlinux.org/index.php/Systemd/Services
Ulrich Dangel

Respostas:

29

Adicione After=mysql.serviceao seu arquivo de serviço (ou altere-o para o nome correto do serviço), por exemplo:

[Unit]
Description=Boardies Email Server Startup Script
After=mysql.service

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

Observe que você não precisa colocar seu arquivo de serviço em / lib / systemd / system, ele é um arquivo fornecido pelo usuário e você deve copiá-lo apenas para / etc / systemd / system.

Para obter uma lista de todos os arquivos de serviço, você pode usar systemctl list-unit-filese determinar o nome correto para o serviço de banco de dados (provavelmente é mysql.service ou mysqld.service)

Ulrich Dangel
fonte
podemos ter múltiplos After=*.servicee ordenados?
Ciasto piekarz