Por que o teste de um arquivo após o fornecimento falha no Upstart?

0

O seguinte script Upstart, salvo como /etc/init/upstart-test.conf funciona:

start on filesystem
stop on on runlevel [!2345]

pre-start script
  set -x
  [ ! -f /etc/default/grub ] && { stop; exit 0; }
  . /etc/default/grub
  # [ ! -f /etc/default/grub ] && { stop; exit 0; }
end script

script
  set -x
  . /etc/default/grub
  true
end script

Iniciando-se (no Ubuntu 14.04.5):

$ sudo initctl start upstart-test
upstart-test start/running, process 2380

Se eu descomentar o segundo teste de existência de arquivo, o trabalho falhará:

$ sudo initctl start upstart-test
initctl: Job failed to start

Por quê? O log mostra:

$ sudo cat /var/log/upstart/upstart-test.log 
+ [ ! -f /etc/default/grub ]
+ . /etc/default/grub
+ GRUB_DEFAULT=0
+ GRUB_TIMEOUT=0
+ GRUB_TIMEOUT_STYLE=hidden
+ GRUB_RECORDFAIL_TIMEOUT=0
+ lsb_release -i -s
+ GRUB_DISTRIBUTOR=Ubuntu
+ GRUB_CMDLINE_LINUX_DEFAULT=
+ GRUB_CMDLINE_LINUX=
+ GRUB_GFXMODE=auto
+ [ ! -f /etc/default/grub ]

O arquivo nunca desaparece. A segunda linha de teste de arquivo é idêntica; Eu até tentei ambos copiar / colar e digitá-lo manualmente para ter certeza. O que está acontecendo?

    
por detly 03.10.2016 / 11:57

1 resposta

1

Eu nunca usei upstart, então essa pode não ser toda a história.

Tente adicionar true ao final do seu script de pré-inicialização, assim como os outros script em seu arquivo.

Quando /etc/default/grub existe, seu comando [ (que é o mesmo que test ) retorna um status de saída diferente de zero, que é um valor "false". Isso faz com que o comando inteiro com && e o resto da linha seja falso, então, como pretendido, o lado direito não é executado, mas este é o último comando no script de pré-inicialização, e o upstart pode ver um não. -zero sai do status no último comando como uma falha.

    
por Delan Azabani 03.10.2016 / 13:27