TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #548 861
Состояние скрипта между запусками

Многие Bash-скрипты пишутся так, будто они живут один запуск. Но в реальности скрипт могут: остановить, перезапустить, запустить второй раз параллельно или оборвать посреди обработки. Чтобы не делать все заново и не ломать данные, нужны три вещи:

lock - не дать запуститься дважды
state - помнить текущее состояние
checkpoint - знать, с какого места продолжать

1️⃣ Lock: защита от параллельного запуска


LOCK=/tmp/myjob.lock

exec 9>"$LOCK"
flock -n 9 || {
echo "Скрипт уже запущен"
exit 1
}


flock не даст второму экземпляру стартовать одновременно.

2️⃣ State: храним статус в файле. Например:


STATE=/var/tmp/myjob.state
echo "stage=download" > "$STATE"


Или читаем:


source "$STATE"
echo "$stage"


Так можно помнить: текущий этап, последний обработанный файл и время последнего успешного шага

3️⃣ Checkpoint: продолжаем с нужного места. Допустим, обрабатываем список строк:


CHECKPOINT=/var/tmp/myjob.offset
last_done=$(cat "$CHECKPOINT" 2>/dev/null || echo 0)

n=0
while IFS= read -r line; do
((n++))
(( n <= last_done )) && continue

echo "Обрабатываю: $line"

echo "$n" > "$CHECKPOINT"
done < input.txt


Если скрипт упадет на 500-й строке, следующий запуск продолжит с 501-й.

🛠 Итоговая практика


STATE_DIR=/var/tmp/myjob
mkdir -p "$STATE_DIR"

LOCK="$STATE_DIR/lock"
CHECKPOINT="$STATE_DIR/checkpoint"

exec 9>"$LOCK"
flock -n 9 || exit 1

trap 'rm -f "$LOCK"' EXIT


BashTex 📱 #bash #scripts
  • 👍 13
More from @bash_tex
  1. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  2. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  3. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  4. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  5. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  6. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →