Interrupção inesperada no arquivo starup do Ubuntu

0

Eu tenho um problema com os arquivos upstart do Ubuntu em / etc / init /. Eu estou tentando executar um processo se ele já não existir. Então eu escrevi um arquivo conf e comecei com "start"

Os dois arquivos a seguir são praticamente os mesmos, exceto pelo processo que está sendo pesquisado. O processo init no primeiro arquivo é sempre encontrado e algumas repetições de "1 2 4" são enviadas para $ TMPFILE como resultado.

start on filesystem and net-device-up IFACE!=lo
stop on runlevel [016]
respawn
script
TMPFILE=/var/log/tmp.log
echo 1 >> $TMPFILE
PID=$(pgrep -f "init" -o) 
echo 2 >> $TMPFILE
if [ -z $PID ] ; then
    echo 3 >> $TMPFILE
fi
echo 4 >> $TMPFILE
end script 

Para o segundo arquivo, doesnotexist não é encontrado pelo pgrep. No entanto, apenas as repetições de "1" são enviadas para $ TMPFILE. Eu também tentei executar a parte do script separadamente, e isso gera "1 2 3 4" exatamente como esperado.

start on filesystem and net-device-up IFACE!=lo
stop on runlevel [016]
respawn
script
TMPFILE=/var/log/tmp.log
echo 1 >> $TMPFILE
PID=$(pgrep -f "doesnotexist" -o) 
echo 2 >> $TMPFILE
if [ -z $PID ] ; then
    echo 3 >> $TMPFILE
fi
echo 4 >> $TMPFILE
end script 
  1. Como isso aconteceu? O upstart recebeu o resultado de pgrep como uma exceção?
  2. Como posso resolver este problema?
  3. Por que haveria algumas repetições da saída em vez de uma? A saída não está crescendo indefinidamente e não parece ser re-spawning.
por JavaYu 30.09.2014 / 20:34

1 resposta

0

O problema é que as seções de script no upstart são executadas com o sinalizador set -e. Isso significa que o shell com saída se algum erro de comando (como pgrep). A solução é adicionar um || true após o comando pgrep.

    
por CameronNemo 01.10.2014 / 01:26