systemctl enable difere de systemctl start, como?

systemctl enable difere de systemctl start, como?

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/mysqldinitscript legado, mas não pode systemctl enablefazê-lo porque precisa de um .servicearquivo 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-reloadapós criar/modificar.


Alternativamente, você pode instalar o initscripts-systemdpacote, que inclui arch-daemons.targeto 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

informação relacionada