El problema no es realmente con cron, es con tu trabajo.
Necesitará que su trabajo interactúe con un candado de alguna descripción. La forma más fácil de hacerlo es hacer que intente crear un directorio y, si tiene éxito, continuar, si no salir. Cuando su trabajo haya finalizado y salga, debería eliminar el directorio listo para la próxima ejecución. Aquí hay un guión 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
Ejecute esto en una terminal y luego, antes de que transcurran 60 segundos, ejecútelo en otra terminal y saldrá con el estado 1. Una vez que se cierra el primer proceso, puede ejecutarlo desde la segunda terminal ...
EDITAR:
Cuando acabo de enterarme de la bandada, pensé en actualizar esta respuesta.
El lote (1) puede ser más fácil de usar. En este caso flock -n
parecería apropiado, por ejemplo
* * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/job
Ejecutaría su trabajo cada minuto pero fallaría si el lote no puede obtener un bloqueo en el archivo.