systemctl enable difiere de systemctl start, ¿en qué?

systemctl enable difiere de systemctl start, ¿en qué?

Estoy ejecutando un cuadro de Arch Linux (más reciente, actualizado) e intento 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

Todo eso está bien y funciona muy bien cuando quiero iniciar/detener manualmente; sin embargo, cuando se trata de iniciarlo 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, esto me confunde seriamente 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?

Respuesta1

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/mysqldscript de inicio heredado, pero no puede systemctl enablehacerlo porque necesita un .servicearchivo real que pueda tener un enlace simbólico en el lugar adecuado.

Puedes escribir una unidad de este tipo tú mismo y ponerla en /etc/systemd/system/mysqld.service:

[Unidad]
Descripción=Servidor MySQL
Después=red.objetivo

[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
Directoriodetrabajo=/usr

[Instalar]
WantedBy=multiusuario.objetivo

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


Alternativamente, puede instalar el initscripts-systemdpaquete, que incluye arch-daemons.targetservicios de inicio automático 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 de inicio en uso.

Respuesta2

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

/lib/systemd/system/mysqld.servicio

[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

Respuesta3

Nota bene: Recuerde colocar los archivos de unidades específicos del host en /etc/systemd/system/y NOT /lib/systemd/system/.

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

Entonces, a menos que un paquete instale archivos unitarios por sí solo (en /lib/systemd/system/), coloque sus propios elementos "personalizados" en /etc/systemd/system/.

Respuesta4

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

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

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

información relacionada