Сейчас я использую сценарий Bash (вдохновленный сценарием Gemini), чтобы определить, когда процесс прекращает запись в стандартный вывод более чем на 10 минут, а затем перезапустить его. Сценарий работает, но кажется беспорядочным, и мне бы хотелось реализовать его более чистым и идиоматическим способом.
Одно дополнительное требование:
Если 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
Мобильная версия