다음을 수행하는 스크립트를 만들고 싶습니다. 하루 중 특정 시간에 시작하여 다른 특정 시간에 끝납니다.
예를 들어 테스트하려는 프로그램이 있으므로 스크립트는 오후 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