특정 시간에 실행하고 종료하는 Bash 스크립트 작성

특정 시간에 실행하고 종료하는 Bash 스크립트 작성

다음을 수행하는 스크립트를 만들고 싶습니다. 하루 중 특정 시간에 시작하여 다른 특정 시간에 끝납니다.

예를 들어 테스트하려는 프로그램이 있으므로 스크립트는 오후 10시에 시작하여 오전 9시까지 계속 실행되도록 설정되어 있습니다.

이것은 프로그램을 계속해서 실행하는 것에 대해 제가 가졌던 또 다른 질문의 연속입니다.

나는 다음을 가지고 있습니다 :

#!/bin/bash

trap "echo manual abort; exit 1"  1 2 3 15;
RUNS=0;
while open  -W /Path/to/Program.app
do
    RUNS=$((RUNS+1));
    echo $RUNS > /temp/autotest_run_count.txt;
done

exit 0

이 스크립트는 기본적으로 Mac OSX에서 내 프로그램을 실행하고 오류를 포착합니다. 그렇지 않으면 프로그램이 닫힐 때 프로그램을 다시 실행합니다.

위에서 언급한 것처럼 실행하고 싶습니다. 오후 10시에 시작합니다. 오전 9시에 종료됩니다.

귀하의 조언은 항상 유용합니다.

감사해요!

유덴

답변1

시작 시 한 번 실행할 수 있고 오후 9시에서 오전 9시 사이에 작업을 수행할 수 있도록 스크립트를 확장했습니다.

#!/bin/bash -·
LOGFILE="/tmp/autotest_run_count.txt"

trap "echo manual abort; exit 1"  1 2 3 15
RUNS=0
while [ 1 ] ; do·
    HOUR="$(date +'%H')"
    if [ $HOUR -ge 21 -a $HOUR -lt 9 ] ; then
        # run program
        libreoffice || exit 1
        RUNS=$((RUNS+9))
        echo $RUNS > $LOGFILE
    else
        echo $RUNS, waiting H=$HOUR > $LOGFILE
        # note: calculating the time till next wakeup would be more 
        # efficient, but would not work when the time changes abruptly
        # e.g. a laptop is suspended and resumed
        # so, waiting a minute is reasonably efficient and robust
        sleep 60
    fi
done

답변2

나는 이 스크립트를 사용합니다. 주어진 시간에 다른 스크립트를 시작하고 다른 주어진 시간에 중지합니다. 이 시간 동안 스크립트가 아직 실행 중인지 주기적으로 확인하고 그렇지 않은 경우 다시 시작합니다. 필요에 따라 시작 시간, 중지 시간, 스크립트 이름 및 사용되는 셸을 변경하고 관련 "while" 줄(날짜 + 시간 또는 시간만)을 주석 처리하면 됩니다.

    #!/bin/bash

    if [ "$1" = "go" ]; then

        starttime1=0900 #e.g. 201712312355 for date+time or 1530 for time
        stoptime1=1100
        scriptname1="./myscript"

        # wait for starttime
        echo "Waiting for " "$starttime1" " to start " "$scriptname1";
        #while [ $(($(date +"%Y%m%d%H%M") < $starttime1)) = 1 ]; do #day and time
        while [ $((10#$(date +"%H%M") != 10#$starttime1)) = 1 ]; do #just time. 10# forces following number to be interpreted as base 10. Otherwise numbers with leading zero will be interpreted as octal and this causes errors.
            sleep 10;
        done;

        # run target script
        lxterminal -e "$scriptname1";

        # check if the target script is running, until the stoptime is reached and restart it if necessary
        echo "Waiting for " "$stoptime1" " to stop " "$scriptname1";
        #while [ $(($(date +"%Y%m%d%H%M")<$stoptime1)) = 1 ]; do #day and time
        while [ $((10#$(date +"%H%M") != 10#$stoptime1)) = 1 ]; do #just time. 10# forces following number to be interpreted as base 10. Otherwise numbers with leading zero will be interpreted as octal and this causes errors.
            sleep 10;
            if [ -z $(pidof -x "$scriptname1") ]; then
                echo "script was stopped.";
                lxterminal -e "$scriptname1";
            fi;
        done;

        # end the target script when the stoptime is reached
        kill $(pidof -x "$scriptname1");
        echo "ok.";

    else
        lxterminal -e "$0" go;
        exit;
    fi

관련 정보