Я хотел перезапустить процесс, если он перестает записывать на стандартный вывод.
Я использую композицию докера, которая одновременно загружает некоторый контент на сервер. Проблема в том, что иногда он зависает, чтобы это исправить, я просто перезапускаю его. На данный момент это работает.
Но я хотел сделать что-то похожее на это (это скрипт Gemini), но более чистым способом.
Я хочу, чтобы он обрабатывал поведение выхода при создании докера. Например, если docker compose возвращает 0 (успешное выполнение), я хочу, чтобы он вышел из цикла.
Какой самый чистый способ сделать это?
#!/bin/bash
while true; do
# Start the program in the background and capture its output
docker compose -f $1 up | while true; do
# 'read' will wait up to 600 seconds (10 min) for a new line
if ! read -t 600 line; then
echo "No output for 10 minutes! Killing and restarting..."
# Kill the parent process of the pipe (your_program.sh)
docker compose -f $1 down
break
fi
echo "$line"
done
sleep 1
done