Eu uso este script. Ele inicia outro script em um determinado momento e o interrompe em outro momento determinado. Entre periodicamente verifica se o script ainda está em execução e, se não, o reinicia.
Você só precisa alterar a hora de início, o tempo de parada, o scriptname e o shell que está usando de acordo com suas necessidades e comentar as linhas relevantes "while" (data + hora ou apenas a hora).
#!/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