Como parar com força um loop infinito no “script de pré-inicialização” do Upstart?

0

Eu tenho o seguinte pre-start script em uma das minhas configurações do Upstart:

pre-start script
  cd "$(dirname "$(dirname "$(readlink "/etc/init/${UPSTART_JOB}.conf")")")"

  . "lib/upstart/waitFor[...].sh"
end script

A função chamada é essencialmente apenas um loop sem fim esperando que algum recurso fique disponível para o qual nenhuma configuração Upstart existe atualmente:

function waitFor[...]()
{
  while [ true ]
  do
    if [...] > /dev/null
    then
      break
    fi

    sleep 10s
  done
}

waitFor[...]

Ontem eu reconheci um problema com essa abordagem se o recurso esperado não fosse disponibilizado por algum motivo: O trabalho trava permanentemente em start/pre-start , o que é esperado, mas se eu emitir um evento stop , o pre-start script não é morto ou algo assim, o que eu presumi erroneamente, mas o estado do trabalho foi alterado para stop/pre-start . O problema com isso é que o shell no qual eu emiti o evento stop fica suspenso para sempre agora, provavelmente esperando que o pre-start script seja concluído. Se eu usar CTRL + C que shell e emite stop novamente, Upstart me diz que o trabalho já está parado e retorna rápido, mas o pre-start script ainda está em execução, o que pode ser visto facilmente usando status , que gera stop/pre-start novamente.

Então, eu preciso de alguma forma para forçar o Upstart a matar o script em si ou de alguma forma no script para reconhecer que ele deve parar de esperar por si mesmo.

Não consigo encontrar nenhum argumento force ou tal para o Upstart, apenas --no-wait . Mas isso não para o script de espera, apenas não bloqueia mais a shell de parada. Então, há alguma mudança de estado em que o script possa se reconhecer facilmente? A única coisa que posso pensar atualmente é consultar o status do trabalho em si.

Mais alguma ideia? Eu acho que eu preferiria algum argumento de linha de comando para parar que eu poderia ter perdido.

    
por Thorsten Schöning 13.04.2018 / 10:21

0 respostas