Как организовать атомарную блокировку на основе lock-файла?
И несколько условно-процессов с именами, которые время от времени желают получить блокировку: Foo, Bar, ... .
Процессы условные, поэтому блокировка должна сохраняться, даже если процесс, захвативший ее, умрет и даже если компьютер перезагрузится. Команды должны быть атомарными (или с использованием аналога flock).
Предлагается организовать в виде некого файла блокировки (my.lock):
1. Если файл отсутствует или пустой, значит блокировка отсутствует.
2. Если файл содержит строку Foo, то это значит блокировка захвачена процессом Foo.
Собственно вопросы:
1. Какой командой bash осуществить захват блокировки?
Команда должна возвращать: 0, если блокировка уже была захвачена этим процессом ранее или только что; 1, если блокировка захвачена кем-то другим.
2. Какой командой bash освобождение блокировки?
Команда должна возвращать: 0, если блокировка была захвачена этим процессом и освободилась; 1, если блокировка захвачена кем-то другим; 2, если блокировки не было.
3. Какой командой bash процесс может проверить захвачена ли блокировка или нет?
Команда должна возвращать: 0, если блокировка была захвачена этим процессом; 1, если блокировка захвачена кем-то другим; 2, если блокировки нет.
test -f /etc/pki/nginx/dhparam.pem && echo "файл /etc/pki/nginx/dhparam.pem уже есть, пропускаем его" || openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096
2. grep и && или|| в зависимости от требуемого кода.
2. выйти из if или удалить
3.ls
Вообще все зависит от размера и сложности скрипта, я вам написал самый простой способ.
pqgg7nwkd4,
Для проверки статуса онлайн его можно принтовать команда | echo $?
ну а еще можно нажать кнопочку "решено"
не забудь что если так принтовать код ошибки то ее видно визуально НО само эхо всегда сработает как истина ибо оно выводит любой из статусов на вывод но завершается команда корректно!
В качестве файла блокировки использовать каталог(есть каталог - заблокировано) подробности блокировки писать в файл в этом каталоге. команды mkdir grep rmdir