TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #144 1.05K
Самовосстанавливающийся Bash-скрипт: проверка и запуск недостающих частей

При создании сложных Bash-скриптов иногда требуется, чтобы они могли восстанавливать выполнение после прерываний. Это особенно актуально для долгих процессов, например, обработки файлов, миграции данных или массовой загрузки.

В чем идея:

Сохранение состояния: фиксируем завершённые этапы в отдельном файле.
Проверка состояния: перед выполнением этапа проверяем, был ли он выполнен ранее.
Возобновление: пропускаем выполненные этапы, начиная с незавершённых.



Пример: обработка списка файлов. Допустим, у нас есть список файлов для обработки:


#!/bin/bash

# Список файлов для обработки
FILES=("file1.txt" "file2.txt" "file3.txt")

# Файл состояния
STATE_FILE="process.state"

# Функция для обновления состояния
update_state() {
echo "$1" >> "$STATE_FILE"
}

# Создаём файл состояния, если его нет
if [[ ! -f "$STATE_FILE" ]]; then
> "$STATE_FILE"
fi

# Загружаем выполненные этапы
COMPLETED=$(cat "$STATE_FILE")

echo "Начинаем обработку файлов..."

for FILE in "${FILES[@]}"; do
# Проверяем, был ли файл уже обработан
if echo "$COMPLETED" | grep -q "$FILE"; then
echo "[Пропуск] $FILE уже обработан."
continue
fi

# Обрабатываем файл
echo "Обрабатываем $FILE..."
sleep 2 # Имитация длительной работы

# Если успешно, обновляем состояние
update_state "$FILE"
echo "[Готово] $FILE обработан."
done

echo "Все файлы обработаны!"


Вывод скрипта. Первый запуск:


Начинаем обработку файлов...
Обрабатываем file1.txt...
[Готово] file1.txt обработан.
Обрабатываем file2.txt...
[Готово] file2.txt обработан.
Обрабатываем file3.txt...
[Готово] file3.txt обработан.
Все файлы обработаны!


Повторный запуск:


Начинаем обработку файлов...
[Пропуск] file1.txt уже обработан.
[Пропуск] file2.txt уже обработан.
[Пропуск] file3.txt уже обработан.
Все файлы обработаны!


Где это может применимо:

Массовая обработка данных (например, логов).
Резервное копирование с пропуском уже сохранённых файлов.
Миграция больших объёмов данных.
Загрузка или выгрузка информации с сетевых хранилищ.


BashTex 📱 #bash
  • 👍 16
More from @bash_tex
  1. Oct 13, 2026openat2(): как Linux защищает от выхода за пределы каталога Допустим, приложение должно чи…
  2. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  3. Oct 9, 2026BashTex 📱 #мем
  4. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  5. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  6. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
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 →