쉘 스크립트에서 실행해야 하는 다음 명령이 있습니다.
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