백그라운드에서 명령을 실행하는 동안 쉘 스크립트의 파일에 쓸 수 없습니다.

백그라운드에서 명령을 실행하는 동안 쉘 스크립트의 파일에 쓸 수 없습니다.

쉘 스크립트에서 실행해야 하는 다음 명령이 있습니다.

nohup command >> help.out & 

터미널에서 스크립트를 실행하면 nohup백그라운드에서 명령이 실행되고 다음 명령이 실행되지만 로그가 help.out에 기록되지 않습니다. help.out 파일의 권한을 확인했는데 읽기 전용으로 생성되었습니다. 스크립트는 chmod -R 777 help.out을 사용하여 권한을 변경했으며 더 이상 읽기 전용이 아니지만 여전히 help.out에 아무것도 기록되지 않습니다.

또한 읽기 전용이 아니며 모든 권한을 갖도록 스크립트에서 파일이나 폴더를 만드는 방법도 알고 싶습니다.

#!/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

답변1

백그라운드에 프로세스가 있고 동시에 출력을 로그 파일로 리디렉션하려고 합니다. 다음과 같이 수행해야 합니다. 먼저 stdout을 원하는 위치로 보낸 다음 stdout이 있는 주소로 stderr을 보냅니다.

 some_cmd > some_file 2>&1 &

코드를 다음과 같이 수정해야 합니다.

#!/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

더:1,2

관련 정보