systemctl enable difiere de systemctl start, ¿cómo?

16

Estoy corriendo un Arch Linux (más reciente y actualizada) cuadro, y tratar de conseguir que MySQL se inicie en el arranque. Con el paquete systemd instalado, tengo systemctl disponible y, como tal, puedo hacer cosas como esta:

systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service

Eso está bien, y funciona muy bien cuando quiero iniciar / detener manualmente, sin embargo, cuando se trata de hacer que se inicie en el arranque (al usar 'enable' en systemctl, obtengo un resultado desagradable):

[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory

Obviamente, dado que los otros comandos funcionan bien, estoy seriamente confundido por esto y he pasado un buen rato tratando de resolverlo ... systemctl status genera esto:

[root@rudivarch ~]# systemctl status mysqld.service
mysqld.service
     Loaded: loaded (/etc/rc.d/mysqld)
     Active: inactive (dead) since Tue, 31 Jan 2012 15:32:28 +0000; 1min 25s ago
    Process: 589 ExecStop=/etc/rc.d/mysqld stop (code=exited, status=0/SUCCESS)
    Process: 257 ExecStart=/etc/rc.d/mysqld start (code=exited, status=0/SUCCESS)
    CGroup: name=systemd:/system/mysqld.service

¿Alguien tiene alguna idea de por qué 'habilitar' no funciona?

Rudi Visser
fuente

Respuestas:

19

mysqld.servicees una unidad "virtual", no existe en el sistema de archivos, es solo parte de la capa de compatibilidad de systemd. Puede iniciarlo y systemd ejecutará el /etc/rc.d/mysqldinitscript heredado , pero no puede systemctl enablehacerlo porque necesita un .servicearchivo real que se pueda vincular en el lugar adecuado.

Puede escribir una unidad de este tipo a sí mismo y ponerlo en /etc/systemd/system/mysqld.service:

[Unidad]
Descripción = Servidor MySQL
Después = network.target

[Servicio]
ExecStart = / usr / bin / mysqld --defaults-file = / etc / mysql / my.cnf --datadir = / var / lib / mysql --socket = / var / run / mysqld / mysqld.sock
Usuario = mysql
Grupo = mysql
WorkingDirectory = / usr

[Instalar en pc]
WantedBy = multi-user.target

Ejecutar systemctl daemon-reloaddespués de crear / modificar.


Alternativamente, puede instalar el initscripts-systemdpaquete, que incluye arch-daemons.targetel inicio automático de los servicios definidos en rc.conf. Sin embargo, este paquete podría desaparecer pronto, y siempre es mejor tener archivos de configuración nativos para el sistema init en uso.

usuario1686
fuente
¡Gracias! De hecho, escribí mi propio mysqld.service que se parece mucho a esto ayer, pero pasa a /etc/rc.d/mysqld start / stop para ExecStart / ExecStop. ¡Aceptado, publicaré mi versión también en caso de que alguien más la encuentre! Gracias
Rudi Visser
3

La respuesta de @ Grawity es correcta y probablemente mejor que esto, pero ayer lo resolví básicamente al pasar al script rc.d ...

/lib/systemd/system/mysqld.service

[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/mysqld start
ExecStop=/etc/rc.d/mysqld stop

[Install]
WantedBy=multi-user.target
Rudi Visser
fuente
2

Nota bene: Recuerde poner archivos de unidades específicas de servidor bajo /etc/systemd/system/y NO /lib/systemd/system/.

Este último es para cosas específicas de la distribución; el primero es para cosas específicas del host que configura usted mismo. Es como /usr/bin/vs. /usr/local/bin/, respectivamente.

Entonces, a menos que un paquete instale archivos de unidad por sí mismo (debajo /lib/systemd/system/), coloque sus propias cosas "personalizadas" debajo /etc/systemd/system/.

Acuarela
fuente
1
Esto realmente no responde a su pregunta. Esto se parece más a un comentario a la respuesta de @ Rudi.
PhilT
0

Habilitar es activar el servicio "unidad", también conocido como daemon, al inicio de systemd.

OpenSUSE:

# systemctl list-units --all | grep sql
mysql.service             loaded inactive dead          LSB: Start the MySQL database 
(good)

# systemctl enable mysql.service
mysql.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysql on
insserv: Service localfs has to exists for service vmware-USBArbitrator
insserv: Service network is missed in the runlevels 2 to use service vmware
Warning: unit files do not carry install information. No operation executed.

(it actually redirects to old chkconfig/sysvinit and that corrects init databases)

# systemctl start mysql.service

(no output)

# systemctl status mysql.service
mysql.service - LSB: Start the MySQL database server
          Loaded: loaded (/etc/init.d/mysql)
          Active: active (running) since Tue, 31 Jan 2012 20:07:52 +0100; 5s ago
         Process: 999999 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
          CGroup: name=systemd:/system/mysql.service
                  ├ 999999 /bin/sh /usr/bin/mysqld_safe --mysqld=mysqld --user=mysql...
                  └ 999999 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql...

(sort of runs)
ZaB
fuente
Sí, entiendo esto, y mysqld es un demonio / servicio que quiero ejecutar al inicio. Este es mi punto, comienza / se detiene, pero no se "habilitará".
Rudi Visser
0

En mi sistema FC15, cuando ejecuté 'systemctl enable mysqld.service', regresó automáticamente con:

mysqld.service no es un servicio nativo, que redirige a / sbin / chkconfig. Ejecutando / sbin / chkconfig mysqld en

Así que intenta correr: /sbin/chkconfig mysqld on

john_a_s
fuente
0

Si tiene ... al habilitar su unidad de servicio, cópiela a / etc / systemd / system

Failed to issue method call: No such file or directory

Para habilitar su unidad de servicio, agregue debajo de ... para que pueda habilitar el sistema mysqld.service (está habilitado en el espacio de nombres de cada usuario)

[Install]
WantedBy=multi-user.target

Saludos, sugatang itlog

sugatang itlog
fuente