O problema não está realmente no cron - está no seu trabalho.
Você precisará que seu trabalho interaja com um bloqueio de alguma descrição. A maneira mais fácil de fazer isso é tentar criar um diretório e, se tiver êxito, continue, se não sair. Quando seu trabalho terminar e sair, ele deve remover o diretório pronto para a próxima execução. Aqui está um script para ilustrar.
#!/bin/bash
function cleanup {
echo "Cleanup"
rmdir /tmp/myjob.lck
}
mkdir /tmp/myjob.lck || exit 1
trap cleanup EXIT
echo 'Job Running'
sleep 60
exit 0
Execute isto em um terminal e antes de 60 segundos rodá-lo em outro terminal ele sairá com o status 1. Assim que o primeiro processo sair, você poderá executá-lo a partir do segundo terminal ...
EDITAR:
Como acabei de aprender sobre o bando, pensei em atualizar essa resposta.
O bando (1) pode ser mais fácil de usar. Nesse caso, flock -n
pareceria apropriado, por exemplo,
* * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/job
Executaria seu trabalho a cada minuto, mas falharia se o flock não conseguisse obter um bloqueio no arquivo.