Script do Bash que falha ao chamar outro script sem erro

0

Eu tenho um script bash que é chamado a partir de um script init.d na inicialização. Eu estou precisando fazer várias reinicializações para este script, então estou criando um arquivo intermediário que é usado para verificar se o script deve estar funcionando ou não. Meu problema é, no script que é chamado por um script init.d (meio novo para bash, então não tenho certeza se isso é tecnicamente chamado de script) que "script" chama outro script que faz o meu trabalho real, mas nunca Obtém correu e não produz um erro. É o checkversion.sh arg1 arg2. Eu canalizei a saída do stderr para um arquivo que nunca recebe um erro. Ele faz se eu colocar em caminho de arquivo propositalmente ruim. Você pode ver que eu tenho alguns arquivos de saída usados após a chamada do script e eles são preenchidos corretamente para obter acesso. Estou perdendo algo óbvio?

Estrutura básica: /etc/init.d/myupdate chama /usr/bin/databases/runcheckversion.sh que eventualmente chama /usr/bin/databases/checkversion.sh mas checkversion.sh nunca é executado e nenhum erro é gerado. Pensando que pode ter a ver com uma especificação PATH?

/etc/init.d/myupdate code:

#! /bin/sh
### BEGIN INIT INFO
#Provides: myupdate
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

case "$1" in
    start)
         /usr/bin/databases/runcheckversionwithupdate.sh
         ;;
    stop|restart|reload)
         ;;
esac

/usr/bin/databases/runcheckversion.sh code:

#! /bin/sh

after_reboot()
{
   versionNumber=$(< /usr/bin/databases/afterreboot.txt);
   #This following command never executes and theres no error output
   sudo /usr/bin/databases/checkversion.sh $versionNumber /usr/bin/databases/my.db.sqlite 2> didntwork.txt 
  ((versionNumber++));
  echo $versionNumber>/usr/bin/databases/afterreboot.txt;  
}




if [ -f /usr/bin/databases/afterreboot.txt ]; then
    sleep 20
    after_reboot
    checkVersion=$(< /usr/bin/databases/afterreboot.txt)
    if(($checkVersion < 2)); then
    sudo reboot
    fi
    echo "DONE"
else
  echo "1">/usr/bin/afterreboot.txt;
  echo "worked"
  sudo reboot
fi
    
por Reaperr 18.05.2017 / 19:37

1 resposta

0

O arquivo que você está verificando antes de chamar a função after_reboot () é: /usr/bin/databases/afterreboot.txt

No entanto, o arquivo em que você está ecoando 1 (se o arquivo acima não existir) é: /usr/bin/afterreboot.txt

Parece que você está criando um arquivo (em / usr / bin) e verificando outro (em / usr / bin / databases).

O seguinte pode funcionar:

#! /bin/sh

after_reboot()
{
   versionNumber=$(< /usr/bin/databases/afterreboot.txt);
   #This following command never executes and theres no error output
   sudo /usr/bin/databases/checkversion.sh $versionNumber /usr/bin/databases/my.db.sqlite 2> didntwork.txt 
  ((versionNumber++));
  echo $versionNumber>/usr/bin/databases/afterreboot.txt;  
}




if [ -f /usr/bin/databases/afterreboot.txt ]; then
    sleep 20
    after_reboot
    checkVersion=$(< /usr/bin/databases/afterreboot.txt)
    if(($checkVersion < 2)); then
    sudo reboot
    fi
    echo "DONE"
else
  echo "1">/usr/bin/databases/afterreboot.txt;
  echo "worked"
  sudo reboot
fi
    
por 18.05.2017 / 19:49