
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.service
es 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/mysqld
script de inicio heredado, pero no puede systemctl enable
hacerlo porque necesita un .service
archivo 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-reload
después de crear/modificar.
Alternativamente, puede instalar el initscripts-systemd
paquete, que incluye arch-daemons.target
servicios 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