В настоящее время я создаю папку блокировки, которая создается при запуске моего сценария, и я также перемещаю файлы в подпапки здесь для обработки. Когда скрипт заканчивается, вызывается TRAP, который удаляет папку и содержимое блокировки, все из которых работает нормально. У нас была проблема на днях, когда кто-то вытащил власть с одного из серверов, поэтому мой TRAP никогда не вызывался, поэтому при повторной загрузке папки блокировки все еще было, что означало, что мои скрипты не могли возобновиться, пока они не будут удалены вручную. Каков наилучший способ проверить, запущен ли скрипт? Я в настоящее время этот подход с использованием процесса идентификаторов:Создание файла блокировки файлов
if ! mkdir $LOCK_DIR 2>/dev/null; then # Try to create the lock dir. This should pass successfully first run.
# If the lock dir exists
pid=$(cat $LOCK_DIR/pid.txt)
if [[ $(ps -ef | awk '{print $2}' | grep $pid | grep -v grep | wc -l) == 1 ]]; then
echo "Script is already running"
exit 1
else
echo "It looks like the previous script was killed. Restarting process."
# Do some cleanup here before removing dir and re-starting process.
fi
fi
# Create a file in the lock dir containing the pid. Echo the current process id into the file.
touch $LOCK_DIR/pid.txt
echo $$ > $LOCK_DIR/pid.txt
# Rest of script below
Check 'man 1 lockfile lockfile-check lockfile-create lockfile-remove lockfile-touch' – anishsane
Используйте команду' flock'. 'man flock' содержит примеры – hek2mgl
Из того, что я понимаю, используя mkdir, также является атомарной операцией, и, видя, что мне нужен этот каталог, каждый из них запускается, он также может использоваться как основной файл« блокировки ». Я не уверен, как я привяжусь к текущей реализации? –