
Estou executando uma caixa do Arch Linux (mais recente e atualizada) e tentando fazer com que o MySQL inicie na inicialização. Com o pacote systemd instalado tenho o systemctl disponível e, como tal, posso fazer coisas assim:
systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service
Tudo bem e funciona muito bem quando quero iniciar/parar manualmente, no entanto, quando se trata de iniciar na inicialização (usando 'enable' no systemctl, recebo uma saída desagradável):
[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory
Obviamente, como os outros comandos funcionam bem, estou seriamente confuso com isso e passei um bom tempo tentando descobrir ... systemctl status gera o seguinte:
[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
Alguém tem alguma idéia de por que 'ativar' não funciona?
Responder1
mysqld.service
é uma unidade "virtual" – não existe no sistema de arquivos, é apenas parte da camada de compatibilidade do systemd. Você pode iniciá-lo e o systemd executará o /etc/rc.d/mysqld
initscript legado, mas não pode systemctl enable
fazê-lo porque precisa de um .service
arquivo real que possa ter um link simbólico no local apropriado.
Você mesmo pode escrever essa unidade e colocá-la /etc/systemd/system/mysqld.service
:
[Unidade] Descrição=Servidor MySQL Depois=network.target [Serviço] ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock Usuário=mysql Grupo=mysql Diretório de Trabalho=/usr [Instalar] WantedBy = multiusuário.target
Execute systemctl daemon-reload
após criar/modificar.
Alternativamente, você pode instalar o initscripts-systemd
pacote, que inclui arch-daemons.target
o início automático dos serviços definidos no rc.conf
. No entanto, este pacote pode desaparecer em breve e é sempre melhor ter arquivos de configuração nativos para o sistema init em uso.
Responder2
A resposta do @Grawity está correta e provavelmente melhor que isso, mas resolvi ontem basicamente passando para o 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
Responder3
Nota bene: Lembre-se de colocar os arquivos de unidade específicos do host em /etc/systemd/system/
e NOT /lib/systemd/system/
.
O último é para coisas específicas de distro; o primeiro é para coisas específicas do host que você mesmo configura. É como /usr/bin/
vs. /usr/local/bin/
, respectivamente.
Portanto, a menos que um pacote instale arquivos de unidade sozinho (em /lib/systemd/system/
), coloque seu próprio material "personalizado" em /etc/systemd/system/
.
Responder4
No meu sistema FC15, quando executei 'systemctl enable mysqld.service', ele voltou automaticamente com:
mysqld.service não é um serviço nativo, redirecionando para /sbin/chkconfig. Executando /sbin/chkconfig mysqld em
Então tente executar:
/sbin/chkconfig mysqld on