1

В моем сценарии я хочу выполнить команду, которая подключается к удаленному серверу и может занять очень много времени из-за плохого сетевого подключения. Поэтому я хочу, чтобы время истекло и меня убили через 60 секунд. Однако есть случаи, когда он только начинает работать на 59-й секунде и вскоре уничтожается усеченным выводом (незавершенная задача).

Я использую время ожидания GNU, которое принимает только значение времени и убивает процесс по истечении этого времени. Я ожидаю, что это инструмент, который останавливает процесс и убивает процесс, только если:

  1. Это время проходит
  2. Нет никакого выхода из этого процесса.

Какие-либо предложения?

1 ответ1

0

Мне кажется, что вы можете по-другому подходить к проблеме. Предполагая, что вы подключаетесь к удаленному серверу через SSH, вам следует рассмотреть возможность запуска процесса таким образом, чтобы соединение SSH могло нормально зависать, и процесс продолжал выполняться. В конечном итоге это будет выглядеть примерно так:

nohup script.sh > /dev/null 2>&1 &

При этом используется команда nohup для выполнения script.sh способом, который защищен от зависаний, перенаправляя STDIN/STDOUT в мусорную корзину (/dev/null), а затем в фоновый режим процесса. Это должно освободить TTY, использованный для начального соединения, и позволить процессу продолжить работу в фоновом режиме даже после закрытия сеанса (и TTY).

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