Não é possível gravar no arquivo no shell script ao executar o comando no background

1

Eu tenho os seguintes comandos que precisam ser executados em um script de shell,

nohup command >> help.out & 

Quando executo o script no terminal, o comando nohup é executado em segundo plano e os próximos comandos são executados, mas os logs não são gravados em help.out Eu verifiquei as permissões do arquivo help.out eles foram criados como readonly no script, mas eu mudei as permissões usando chmod -R 777 help.out e não é mais somente leitura, ainda nada está escrito para help.out.

Eu também gostaria de saber como criar o arquivo ou pasta em um script para que ele nunca seja somente de leitura e tenha todas as permissões.

#!/bin/bash

trainingState=1
epoch=50


#URL myspace test
URL="xxxxxx"

nohup python3.6 <arguments> >> help.out &

#processId of xyz
processId=$(pidof python3.6)

#this command executes
curl -X POST -H "Content-Type: application/json" -d '{"markdown" : "### The Training has started !! \n > EPOCS:'"$epoch"'"}' $URL

#while loop also executes but no data to read from file 
while [[ $trainingState == 1 ]]; do
      if ps -p $processId > /dev/null ; then
        echo "training happening"
        value=$(tail -n 1 help.out)
        curl requests etc .....
      else
        value=$(tail -n 1 help.out)
        echo "training finished"
        final curl requests etc .....
        trainingState=0
      fi
done
    
por hamadkh 24.09.2018 / 02:17

1 resposta

1

Você tem processo em segundo plano e deseja redirecionar a saída para um arquivo de log ao mesmo tempo. Você deve fazer isso da seguinte maneira: primeiro, envie stdout para onde deseja ir e, em seguida, envie stderr para o endereço onde a stdout está:

 some_cmd > some_file 2>&1 &

seu código deve ser revisado da seguinte forma:

#!/bin/bash

trainingState=1
epoch=50


#URL myspace test
URL="xxxxxx"

nohup python3.6 <arguments> >> help.out 2>&1 &

#processId of xyz
processId=$(pidof python3.6)

#this command executes
curl -X POST -H "Content-Type: application/json" -d '{"markdown" : "### The Training has started !! \n > EPOCS:'"$epoch"'"}' $URL

#while loop also executes but no data to read from file 
while [[ $trainingState == 1 ]]; do
      if ps -p $processId > /dev/null ; then
        echo "training happening"
        value=$(tail -n 1 help.out)
        curl requests etc .....
      else
        value=$(tail -n 1 help.out)
        echo "training finished"
        final curl requests etc .....
        trainingState=0
      fi
done

Mais: 1 , < href="https://unix.stackexchange.com/questions/74520/can-i-redirect-output-to-a-log-file-and-background-a-process-the-same-time" > 2

    
por 24.09.2018 / 03:18