Проблема не в cron, а в вашей работе.
Вам нужно, чтобы ваша работа взаимодействовала с замком некоторого описания. Самый простой способ сделать это - попытаться создать каталог и в случае успеха продолжить, если не выйти. Когда ваша работа завершится и завершится, она должна удалить каталог, готовый к следующему запуску. Вот сценарий для иллюстрации.
#!/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
Запустите его на одном терминале, затем, до истечения 60 секунд, запустите его на другом терминале, и он выйдет со статусом 1. После выхода из первого процесса вы можете запустить его со второго терминала ...
РЕДАКТИРОВАТЬ:
Как только я узнал о стаде, я решил обновить этот ответ.
flock (1) может быть проще в использовании. В этом случае flock -n
представляется целесообразным, например,
* * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/job
Будет запускать вашу работу каждую минуту, но потерпит неудачу, если flock не сможет получить блокировку файла.