systemctl enable difere de systemctl start, como?

14

Estou executando uma caixa Arch Linux (mais recente, atualizada) e tentando fazer o MySQL iniciar na inicialização. Com o pacote systemd instalado, tenho systemctl disponível e, como tal, posso fazer coisas como esta:

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

Tudo bem, e funciona muito bem quando eu quero iniciar / parar manualmente, no entanto, quando se trata de fazer com que ele inicie 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 isso:

[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?

    
por Rudi Visser 31.01.2012 / 16:42

6 respostas

18

mysqld.service é uma unidade "virtual" - ela não existe no sistema de arquivos, é apenas parte da camada de compatibilidade do systemd. Você pode iniciá-lo e o systemd executará o legado /etc/rc.d/mysqld initscript, mas você não pode systemctl enable porque precisa de um arquivo .service real que pode ser linkado simbolicamente no local apropriado.

Você mesmo pode escrever essa unidade e colocá-la em /etc/systemd/system/mysqld.service :

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

[Service]
ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock
User=mysql
Group=mysql
WorkingDirectory=/usr

[Install]
WantedBy=multi-user.target

Execute systemctl daemon-reload depois de criar / modificar.

Como alternativa, você pode instalar o pacote initscripts-systemd , que inclui arch-daemons.target para iniciar automaticamente os serviços definidos em 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.

    
por 31.01.2012 / 22:50
3

@ A resposta do Grawity está correta e provavelmente melhor do que isso, mas eu consegui resolver isso 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
    
por 01.02.2012 / 10:07
2

Nota: Lembre-se de colocar arquivos de unidade específicos do host em /etc/systemd/system/ e NÃO /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/ .

    
por 19.03.2012 / 04:56
0

Ativar é ativar o "daemon" aka daemon aka service na inicialização 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)
    
por 31.01.2012 / 16:52
0

No meu sistema FC15, quando eu corri 'systemctl enable mysqld.service', ele voltou automaticamente com:

mysqld.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig mysqld on

Então, tente executar: /sbin/chkconfig mysqld on

    
por 07.02.2012 / 19:51
0

Se você tiver ... ao habilitar sua unidade de serviço, copie-a para / etc / systemd / system

Failed to issue method call: No such file or directory

Para habilitar sua unidade de serviço, adicione abaixo o ... para que você possa ativar o mysqld.service (sua ativação no namespace de cada usuário)

[Install]
WantedBy=multi-user.target

Felicidades, sugatang itlog

    
por 02.08.2014 / 10:20