2016-07-27 3 views
0
#!/bin/bash 

at now +1 minutes -f ./test.sh 

logFile="/home/.../testLog.txt" 

time1="114000" 
time2="153000" 
currentTime=`date +"%H%M%S"` 

echo "" >> "$logFile" 
date >> "$logFile" 
echo "$currentTime" >> "$logFile" 
echo "" >> "$logFile" 


if [[ "$currentTime" < "$time1" || "$currentTime" > "$time2" ]] 
then 
    echo "case1" >> "$logFile" 
else 
    echo "case2" >> "$logFile" 
fi 

이 스크립트는 test.sh이라는 파일에 저장됩니다. 예를 들어 오후 5시에 실행하면 case1이 로그 파일에 기록됩니다. 그러나 각각의 후속 at 호출 (매분마다 발생)에 대해 스크립트는 case2을 내 로그 파일에 기록합니다. 이유를 설명해 주시겠습니까?시간을 요구하는 직장에서

+0

이 스크립트는 1 분마다 자체 일정을 조정합니까? 대신 루프에서 또는 cron에서 실행하는 것을 고려 했습니까? –

+0

@thatotherguy : 나는 직장에서 스크립트를 재귀 적으로 호출한다는 사실에 주목했다. – sjsam

+0

@thatotherguy sjsam이 이미'at now +1 atm -f./test.sh'라는 줄을 설명했듯이 1 분 후에 재귀 적으로 스크립트를 호출하는 at 작업을 정의합니다. –

답변

2

at이 으로 작업을 실행하고 스크립트에 bash이 필요하기 때문에 실패합니다.

현재 폐기중인 오류를보고이를 확인할 수 있습니다. 당신은 if 조건 같은 것을 제공 찾을 것 :

sh: cannot open 114000: No such file 
sh: [[: not found 
sh: 111405: not found 

인해이 at가 예약 한 대신 직접 실행되는 것 때마다이 case2을 쓸 것이 실패

.

대신 루프 또는 cron을 사용하십시오.

+0

여기에 문제를 게시하기위한 코드가 간단 해졌습니다. 내 실제 스크립트는 매분마다 호출되지 않습니다. cron 작업은 처리 할 수없는 훨씬 복잡한 작업입니다 (cron 작업은 많은 작업을하기 때문에). 또한 스크립트를 중단하지 않고도 스크립트를 변경할 수 있기를 원하기 때문에 루프를 싫어합니다. 다른 방법이 없습니까? –

+0

스크립트 내용을 예약하는 대신 스크립트 자체를 예약 할 수 있습니다 (예 : 'echo "/path/to/test.sh"| 지금은 +1 분'이다. 이것은 시스템이'at'가'sh' 코드로 내용을 해석하는 대신 shebang에 지정된 올바른 쉘로 스크립트를 실행하게합니다. –

+0

고마워! 그것은 작동하며 훌륭한 솔루션입니다! –