Você tem duas opções para ganhar isso. Normalmente, o cron não importa se a instância anterior da tarefa ainda está em execução.
Opção 1:
Escreva um arquivo de bloqueio no início do script e exclua-o quando terminar. Em seguida, uma verificação no início do script verifica se o arquivo existe e, se sim, o script termina sem fazer algo. Isso poderia, por exemplo, ficar assim:
# if the file exists ('-e') end the script:
[ -e "/var/lock/myscript.pid" ] && exit
# if not create the file:
touch /var/lock/myscript.pid
...
# do whatever the script does.
# if condition
sleep 300 # wait 5 min
...
# remove the file when the script finishes:
rm /var/lock/myscript.pid
Opção 2:
Há também uma utilidade para isso. É chamado run-one
. A partir do manpage:
run-one - run just one instance at a time of some command and unique set of arguments (useful for cronjobs, eg)
O cronjob poderia ficar assim:
* * * * * /usr/bin/run-one /path/to/myscript