2013-07-02 1 views
0

파일이 11:30과 11:40 사이에 언제든지 도착하는 시나리오가 있습니다. 11시 30 분에 시작하여 파일이 도착했는지 확인하기 위해 실행할 스크립트를 예약 할 수 있습니다. 여기 나와 함께있는 것이 있습니다.특정 시간에 중단 할 프로세스가 필요합니다.

i=0 
while [ i -eq 0 ] 
do 
    if [ ! -f $File_Check_Dir/$FILE_NAME ] ; then 
     echo " \n File has arrived at `date +'%d-%m-%Y %H:%M:%S'****" | tee -a ${LOGFILE} 
     i=1 
    fi 
done 

스크립트를 백그라운드에서 실행할 수 있습니다. 그러나 파일이 11:40 ET까지 도착하지 않은 경우 시스템 시간을 확인하고 경고를 보내야합니다. 나는 systime 기능으로 시도했지만 정확히 내가 원하는 것을 얻을 수 없습니다.

+0

11:41까지 기다리지 않고 파일을 받거나 오류를 신고하는 것이 어떻습니까? – bitfiddler

+0

예. 1) 도착할 때 파일 로그를 다운로드하는 프로세스가 있는지 (가능한 경우) 2) 11:41에 하나의 스크립트를 예약하여 도착 여부를 확인하고 전자 메일 또는 기타 경고를 보냅니다. – paulsm4

+0

잘 풀리지 않습니다. 11시 40 분에 정확히 시작하는 프로세스가 있고 그 파일을 처리하고 디렉토리에서 파일을 제거하기 시작할 것입니다. – Vignesh

답변

0

제안 방법 중 몇이 작업을 수행합니다 :

  1. 은 inotify를 지원하는 시스템에서 실행 (데비안 inotify-tools 패키지) 도구 등 inotifywait을 사용하여 변경 사항을 즉시 통보하는 경우 당신의 감시 한 전화 번호부 또는 파일에. 지정된 시간 초과 기간 내에 아무런 작업도 발생하지 않을 경우 -t 옵션을 사용하여 시간 제한을 설정할 수 있습니다. 이 도구를 사용하는 경우 셸 스크립트에 파일이 있는지 확인하고 inotifywait 명령을 실행하는 사이에 경쟁 조건을 관리해야 할 수 있습니다.

  2. timeout 명령을 사용하여 스크립트를 감 쌉니다. 예. timeout 10m my-watch-script. 스크립트가 종료되기 전에 시간 초과가 발생하면 timeout이 종료 코드 124를 리턴하고 시간 초과가 발생했는지 또는 파일이 발견되었는지 테스트 할 수 있습니다.

  3. bash를 사용하는 경우 내장형 SECONDS 변수를 루프 조건의 일부로 테스트하고 타이머가 만료되면 종료하십시오. bash를 사용할 수 없으면 date 명령을 사용하고 초 단위로 출력 형식을 지정하십시오. this answer을 참조하십시오.

그 자체로, 제시된 코드는 매우 긴밀한 폴링 루프에서 실행됩니다. 어딘가에 sleep을 넣는 것이 좋습니다.

+0

inotify 도구는 내가 작업하는 환경에서 사용할 수 없으며 kshell을 사용합니다. 타임 아웃 명령에 대해 자세히 설명해 주시겠습니까? 당신은 cron에서 스케줄을 잡는 동안, 타임 아웃을해야합니까? – Vignesh

+0

@ user2522824 crontab에'timeout' 명령을 넣을 수는 있지만 타임 아웃이 발생하면 다른 조치를 취할 필요가 있습니다. 다른 행동을 취할 필요가 있다면, cron이 실행하는 래퍼 스크립트를 갖는 것이 가장 좋을 것이고 래퍼 (wrapper)는'timeout your-script'를 호출 할 것입니다. –

+0

예. 알았습니다. 감사합니다 오스틴 :) – Vignesh

0

당신이 적절한 통지를 보낸 후 11시 40분 큰 종료 있는지 확인하는 "경우"당신이 하나 더 추가 할 수 있습니다 date +"%H:%M"와 시간을 얻을 수 있습니다 ..

+0

[date-% H : % M -eq 11:46] echo "\ n Pearson File is arrived"인 경우 [i- tee -a $ {LOGFILE} 출구 [!-f $ File_Check_Dir/$ Pearson_DATA_FILE_NAME]; then echo "\ n 파일이 'date +'% d- % m- % Y % H : % M : % S '****"에 도착했습니다. tee -a $ {LOGFILE} i = 1 fi 완료 괜찮습니까? – Vignesh

+0

빠른 시선을 잘 보입니다. 테스트 파일로 실행 해 보셨습니까? – SidJ

+0

date + "H : % M"이 스크립트에서 작동하지 않습니다. 커맨드 라인에서 똑같이 주려고했습니다. 그것은 그 때 작동합니다. – Vignesh

0

한 가지 가능한 옵션 :

스크립트에서 : 11:30 timeout에서

trap sendMailFunction SIGUSR1 
sendMailFunction(){ 
. 
. # Enter your code here, which will send mail in case the file does not arrive in time 
. 
} 
. 
. # Remainder of the script.... 

& 실행 그것은 (귀하의 요구 사항으로, at 또는 cron 사용.)

timeout -s SIGUSR1 10m /path/to/myscript.sh arg1 arg2 arg3 ... 
+0

timeout 옵션을 사용하여 cron에서 스케줄링 명령을 줄 수 있습니까? – Vignesh