Um DIY pode ser escrever um script, que lida com o seu arquivo de bloqueio, enquanto executa o seu trabalho.
Digamos que você crie um executável /my/job
, com o seguinte:
#!/bin/sh
# to be tuned, at your convenience
LASTLOG=/tmp/job.log
LOCKFILE=/tmp/lockfile.lock
RETRY=3
WAIT=10
if test -z "$1"; then
echo missing job script >&2
exit 1
elif ! test -x "$1"; then
echo can not execute "$1" >&2
exit 1
fi
cpt=0
while test $cpt -lt $RETRY
do
if ! test -s $LOCKFILE; then
echo $$ >$LOCKFILE
break
fi
sleep $WAIT
done
if ! grep ^$$$ $LOCKFILE >/dev/null 2>&1; then
echo could not acquire lock >&2
exit 2
fi
"$1" >$LASTLOG 2>&1
ret=$?
rm -f $LOCKFILE
exit $?
Então, o seu crontab seria parecido com:
0 * * * * /my/job /some/script1.sh
2 * * * * /my/job /some/script2.sh