6

Можно ли запустить скрипт из bash (например, python) со временем завершения, а это означает, что если этот скрипт выполняется дольше, чем X секунд, завершить его?

1 ответ1

5

Да, есть возможность запустить скрипт bash с тайм-аутом для его завершения. Вы можете сделать это:

1. Используя таймаут :

Он запускает команду с ограничением по времени. Общий синтаксис включает в себя:

timeout signal duration command/script arguments

где :

  • сигнал - имя сигнала или соответствующий номер. См человек 7 сигнал
  • Duration - время ожидания, указанное в числах с суффиксом s для секунд, m для минут, h для часов, d для дней.
  • По умолчанию это секунды, когда вы указываете только номер. В качестве примера скажем, что вы хотите прервать выполнение сценария через 2 минуты, а затем:

    timeout 2m /path/to/script arg1 arg2
    
  • NOTE . Сигналом тайм-аута по умолчанию является SIGTERM для которого некоторые процессы не завершаются. В этом случае нам нужно использовать сигнал SIGKILL чтобы убить процесс.

        timeout -s KILL 2m /path/to/script arg1 arg2
    

    ИЛИ ЖЕ

        timeout -k 30 2m /path/to/slow-command arg1 arg2
    

    В этом случае тайм-аут сначала отправляет сигнал SIGTERM после начального тайм-аута в 2 минуты. Затем ждет другой тайм-аут 30 секунд и отправляет SIGKILL процессу, если он все еще работает.

2. У меня нет команды timeout :

Ну, есть много альтернатив или обходных путей, если по какой-то причине вы не можете использовать timeout . Это :

  1. Состояние sleep потом kill

       /path/to/script arg1 arg2 & sleep 2m ; kill $!
    
  2. Аварийные сигналы Perl (это можно использовать в последовательном скрипте.):

       perl -e "alarm 120; exec @ARGV" "/path/to/script arg1 arg2"
    
  3. С помощью команды ожидаем :

       time_out=120
       command="/path/to/script arg1 arg2"
    
       expect -c " set echo \"-noecho\";
                   set timeout $time_out;
                   spawn -noecho $command;
                   expect timeout { exit 1 } eof { exit 0 } "
    

Не стесняйтесь добавлять дополнительные детали.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .