Simple demo with lock-file

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env bash
# Команда или скрипт, который нужно запустить
RUN_SCRIPT="cat /dev/zero > /dev/null";
# Lock-файл в котором будем хранить ID процесса (PID)
LOCK_FILE="/tmp/script.lock";
# Считываем из Lock-файла PID и проверяем
# его наличие в процессах с помощью pgrep
# Если Lock-файл содержит несуществующий PID
# то в переменную PID ничего не будет записано
PID=$(pgrep -F $LOCK_FILE 2> /dev/null);
# Проверяем переменную PID на содержимое
if [ $PID ] # Если PID содержит ID процесса
then
# Убиваем процесс
kill -SIGTERM $PID;
# Удаляем Lock-файл
rm $LOCK_FILE;
else # Если PID пустой
# запускаем скрипт и сохраняем его PID
$RUN_SCRIPT & PID=$!;
# Записываем PID в Lock-файл
echo $PID > $LOCK_FILE;
fi
# Завершаем работу скрипта с кодом 0
exit 0;