initctl: Não é possível conectar-se ao Upstart

1

Eu recentemente atualizei meu servidor do Ubuntu V14.04 para o V16.04 e agora o systemctl parece não funcionar mais.

Eu preciso impedir que o daemon de transmissão inicie automaticamente na inicialização, então eu emito o comando

sudo systemctl disable transmission-daemon.service

E recebo a seguinte resposta

Synchronizing state of transmission-daemon.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable transmission-daemon
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
The script you are attempting to invoke has been converted to an Upstart job, but lsb-header is not supported for Upstart jobs.
insserv: warning: script 'screen-cleanup' missing LSB tags and overrides
insserv: Default-Start undefined, assuming empty start runlevel(s) for script 'screen-cleanup'
insserv: Default-Stop  undefined, assuming empty stop  runlevel(s) for script 'screen-cleanup'
insserv: warning: current start runlevel(s) (empty) of script 'transmission-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script 'transmission-daemon' overrides LSB defaults (0 1 6).
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused

O serviço não fica desativado

Atualizar Per @JdeBP excluindo o script de limpeza de tela resolveu o problema

$ sudo rm /etc/init.d/screen-cleanup
$ sudo systemctl disable transmission-daemon.service

Synchronizing state of transmission-daemon.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable transmission-daemon
insserv: warning: current start runlevel(s) (empty) of script 'transmission-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script 'transmission-daemon' overrides LSB defaults (0 1 6).
insserv: warning: current start runlevel(s) (empty) of script 'transmission-daemon' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script 'transmission-daemon' overrides LSB defaults (0 1 6).

Eu posso ver que o serviço está desativado conforme necessário

systemctl status transmission-daemon
● transmission-daemon.service - Transmission BitTorrent Daemon
   Loaded: loaded (/lib/systemd/system/transmission-daemon.service; disabled; ve
  Drop-In: /etc/systemd/system/transmission-daemon.service.d
           └─local.conf
   Active: active (running) since Thu 2018-03-08 08:16:00 EST; 2 days ago
 Main PID: 2423 (transmission-da)
   Status: "Uploading 329.89 KBps, Downloading 11.04 KBps."
   CGroup: /system.slice/transmission-daemon.service
           └─2423 /usr/bin/transmission-daemon -f --log-error -g /etc/transmissi
    
por Neal Bailey 08.03.2018 / 15:10

1 resposta

6

/lib/systemd/systemd-sysv-install é um gancho cujo trabalho é executar as ações de ativação / desativação não nativas que systemd-sysv-generator e outros sistemas de gerenciamento de serviços reconhecerão. O /lib/systemd/systemd-sysv-install do Ubuntu simplesmente chama o /usr/sbin/update-rc.d do Ubuntu. Isso, por sua vez, chama /sbin/insserv . Isso, por sua vez, mostra que há um script van Smoorenbug rc em /etc/init.d e tenta obter informações do cabeçalho LSB a partir dele.

/sbin/insserv tem um caso especial em que reconhece quando o script van Co Smoorenburg rc que encontrou é realmente um link simbólico para o programa /lib/init/upstart-job da Upstart. Como esse é um programa genérico que preenche vários scripts de van Smoorenburg rc , ele não terá informações de cabeçalho de LSB apropriadas para serviços específicos. Portanto, /sbin/insserv tenta invocar o script rc , realmente /lib/init/upstart-job , com o subcomando lsb-header para fazer com que ele calcule e imprima os cabeçalhos LSB certos para o serviço.

Mas /lib/init/upstart-job na verdade não suporta esse subcomando. Os softwares nunca foram integrados corretamente. /lib/init/upstart-job runs initctl , que tenta se conectar a um gerenciador de serviços do Upstart em execução e obviamente falha (porque um não está em execução) e imprime o primeiro erro que você vê por não conseguir se conectar ao soquete /com/ubuntu/upstart e em seguida, ele imprime o segundo erro que você vê sobre o subcomando lsb-header não suportado "para tarefas do Upstart" (mesmo que aqueles eram o que era para ).

O resultado é que tudo dá errado.

Ele está errado há anos. É possível encontrar pessoas relatando esse bug, o que, é claro, aconteceu quando as pessoas executaram insserv direta ou indiretamente sob Upstart e van Smoorenburg init também, voltando bem mais de uma década neste momento. Foi questionado sobre o AskUbuntu em 2016. Existem vários bugs no Launchpad, como este de 2016 .

Curiosamente, em um desses bugs do Launchpad, um de 2010, alguém tentou para fornecer um patch para que upstart-job entenda o subcomando lsb-header e dê ao insserv pelo menos alguma coisa para trabalhar, mesmo que tenha sido pouco informativo. Ninguém, exceto alguns usuários que não tinham acesso para consertar o software, percebeu.

Naturalmente, esses scripts van Smoorenburg rc são wrappers em torno do Upstart para o benefício de softwares e pessoas que não entendem como dirigir o Upstart diretamente com initctl , mas sabem como conduzir o velho van Smoorenburg rc de scripts. No entanto, você está usando o Ubuntu 16; um sistema operacional systemd. O mecanismo de compatibilidade com versões anteriores do systemd está pegando alguns scripts van Co Smoorenburg rc que eles são o mecanismo de compatibilidade com versões anteriores, transformando-os em unidades nativas do systemd e acabando tentando refletir comandos enviados para um gerenciador de serviços systemd para um gerenciador de serviços Upstart que não está lá.

Isso é apenas ridículo.

  1. Encontre o link simbólico em /etc/init.d que está apontando para /lib/init/upstart-job . Pela aparência das coisas, é /etc/init.d/screen-cleanup .
  2. Remova-o.

A cereja no topo do bolo é que transmission-daemon é controlado por uma unidade de serviço nativa do sistema ( /lib/systemd/system/transmission-daemon.service ) no Ubuntu 16, e van Smoorenburg rc mecanismos de compatibilidade com versões anteriores e /lib/systemd/systemd-sysv-install não se aplicam a ele primeiro lugar.

Leitura adicional

por 08.03.2018 / 23:51

Tags