Запуск приложения раз за разом с сохранением результатов

Задача: запустить скрипт/приложение заданное количество раз по очереди. На каждый запуск давать не более чем 30 секунд (к примеру). Если приложение/скрипт завершило работу не корректно, то записать его вывод в отдельный файл.

Решение: все делается через один bash-скрипт. В цикле будет запускаться нужное приложение. Временное ограничение можно сделать с помощью timeout:

Start COMMAND, and kill it if still running after DURATION

Проверка корректности завершения осуществляется через exit code приложения. Если он 0, то все норм. Иначе — нет. В скрипте доступ к этому коду можно получить через $? после выполнения требуемой команды.

Получается скрипт вида:

#!/bin/bash
 
me=$(basename $0)
usage="Usage: $me run_times timeout command_in_quotes file_to_save_output"
 
if [ "$#" -ne 4 ]; then
    echo $usage
    exit 1
fi
 
valid=0
invalid=0
 
for ((i=1;i<=$1;i++))
do
    echo "run #$i"
    r="$(timeout $2 $3)"
    if [ "$?" = "0" ]; then
        ((valid+=1))
    else
        ((invalid+=1))
        echo "$r" | sed -e "s/\x1b\[.\{1,5\}m//g" >> $4 # dummy way to replace ANSI coloring
    fi
done
 
echo "Valid: $valid     Invalid: $invalid"

Пример запуска:

./runner 1000 30 "npm test" results.txt

Тут, runner — это имя скрипта, который представлен выше, 1000 — это количество запусков команды npm test, 30 — максимальное время выполнения команды (в секундах), results.txt — файл, куда дописываются результаты провалившихся запусков.

, ,

Оставить комментарий

Top ↑ | Main page | Back