systemctl enable difere do systemctl start, como?


16

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

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 iniciar na inicialização (usando 'enable' no systemctl, eu 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 ... o status systemctl 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 'enable' não funciona?

Respostas:


19

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 poderá systemctl enable, porque você precisa de um .servicearquivo real que possa ser vinculado ao lugar apropriado.

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

[Unidade]
Descrição = Servidor MySQL
Depois = network.target

[Serviço]
ExecStart = / usr / bin / mysqld - arquivo-padrão = / 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 = multi-user.target

Execute systemctl daemon-reloadapós criar / modificar.


Como alternativa, você pode instalar o initscripts-systemdpacote, que inclui arch-daemons.targeta inicialização automática dos 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.


Obrigado! Na verdade, eu escrevi meu próprio mysqld.service que se parece muito com isso ontem, mas passa para /etc/rc.d/mysqld start / stop para ExecStart / ExecStop. Aceito, também postarei minha versão, caso alguém a encontre! Obrigado
Rudi Visser

3

A resposta do @ Grawity está correta e provavelmente melhor do que isso, mas resolvi ontem basicamente passando 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

2

Nota: Lembre-se de colocar os arquivos de unidades específicas do host em /etc/systemd/system/e NÃO /lib/systemd/system/.

O último é para coisas específicas da distribuição; 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 os arquivos da unidade por si só (abaixo /lib/systemd/system/), coloque suas próprias coisas "personalizadas" /etc/systemd/system/.


11
Isso realmente não responde à sua pergunta. Parece mais um comentário à resposta de @ Rudi.
PhilT

0

Ativar é ativar "unidade", também conhecido como serviço daemon, na inicialização do 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)

Sim, eu entendo isso, e o mysqld é um daemon / serviço que eu quero executar na inicialização. Este é o meu ponto, ele começa / pára, mas não "habilita".
Rudi Visser 31/01

0

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

O 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


0

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

Failed to issue method call: No such file or directory

Para ativar sua unidade de serviço, adicione abaixo do ... para que você possa ativar o sistema mysqld.service (é ativado no espaço de nome de todos os usuários)

[Install]
WantedBy=multi-user.target

Saúde, sugerir

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.