Задача, вроде как, типовая: нужно избежать гонки при одновременном запуске нескольких экземпляров программы. Для этого создаём lock-файл и блокируем его (вариант без блокировки не рассматриваем: файл может остаться после падения программы, это не должно застопорить работу).
Код: Выделить всё
#!/bin/sh
do_something() {
{
flock 3
echo started "$@"
sleep 1
echo finished "$@"
} 3>something.lock
}
do_something 1 &
do_something 2 &
do_something 3 &
sleep 2
do_something 4 &
wait
Shell
% ./test.sh
started 1
finished 1
started 2
finished 2
started 3
finished 3
started 4
finished 4
% ./test.sh
started 1
finished 1
started 2
finished 2
started 3
finished 3
started 4
finished 4
% ./test.sh
started 2
finished 2
started 1
finished 1
started 3
finished 3
started 4
finished 4
%
А может быть, я вообще всё делаю неправильно?