¿Cómo puedo iniciar un servicio systemd solo después de que mysql ha comenzado?

14

Estoy trabajando en un proyecto que es un EmailServer mono. Intenté agregar un servicio al systemd para que se inicie automáticamente durante el arranque, pero tengo un problema.

He creado el script y lo agregué /lib/systemd/system/emailserver.servicey luego lo ejecuté ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service.

Luego ejecuté systemd reload-daemonseguido systemctl start emailserver.servicey luego, cuando corro ps -ef |grep -i emailserver, puedo ver que se mono EmailServer.exeestá ejecutando, todo se ve bien hasta ahora.

Sin embargo, cuando reinicio el servidor en el /var/log/messagesarchivo, contiene el siguiente mensaje de error

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.

En mi script emailserver.service tengo lo siguiente

[Unit]
Description=Boardies Email Server Startup Script

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

[Install]
WantedBy=multi-user.target

Estoy usando OpenSuse 12.1

¿Qué estoy haciendo mal? Gracias por cualquier ayuda que pueda proporcionar.

ACTUALIZACIÓN He descubierto qué está causando que el programa deje de funcionar durante el arranque, pero no estoy seguro de cómo puedo solucionar este problema. Mi programa se basa en una base de datos MySQL y creo que mi programa se está iniciando antes de que MySQL se haya iniciado, ¿cómo puedo hacer que mi servicio no se cargue hasta después de que MySQL se haya iniciado?

Boardy
fuente
Debería echar un vistazo a algunos ejemplos, por ejemplo: en.gentoo-wiki.com/wiki/Systemd o wiki.archlinux.org/index.php/Systemd/Services
Ulrich Dangel

Respuestas:

29

Agregue After=mysql.servicea su archivo de servicio (o cámbielo al nombre de servicio correcto), por ejemplo:

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

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

[Install]
WantedBy=multi-user.target

Tenga en cuenta que no tiene que poner su archivo de servicio en / lib / systemd / system, es un archivo proporcionado por el usuario y solo debe copiarlo en / etc / systemd / system.

Para obtener una lista de todos los archivos de servicio que puede usar systemctl list-unit-filesy determinar el nombre correcto para su servicio de base de datos (probablemente sea mysql.service o mysqld.service)

Ulrich Dangel
fuente
podemos tener múltiples After=*.servicey ordenados?
Ciasto piekarz