Как запустить команду на определенное время в Linux

by itisgood

На днях я переносил большой файл с помощью rsync в другую систему в моей локальной сети.

Поскольку это очень большой файл, для его завершения потребовалось около 20 минут.

Я не хочу ждать так долго, а также я не хочу вручную завершать процесс нажатием CTRL + C.

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

Выполнить команду в течение определенного времени в Linux

Мы можем сделать это двумя способами.

Метод 1 – Использование команды «timeout»

Для этой цели наиболее распространенным методом является использование команды timeout.
Для тех, кто не знает, команда timeout будет эффективно ограничивать абсолютное время выполнения процесса.

Команда timeout является частью пакета GNU coreutils, поэтому она предустановлена во всех системах GNU / Linux.

Допустим, вы хотите запустить команду только в течение определенного времени, а затем автоматически убить ее по истечении этого времени. Для этого мы используем:

$ timeout <time-limit-interval> <command>

Например, следующая команда прекратит работу через 10 секунд.

$ timeout 10s tail -f /var/log/pacman.log
Вам также не нужно указывать суффикс «s» в течение нескольких секунд.
Следующая команда такая же, как указано выше.
$ timeout 10 tail -f /var/log/pacman.log

Другие доступные суффиксы:

“m” в течение нескольких минут,
“h” Часы
d” в течение нескольких дней.

Если вы запустите эту команду tail -f /var/log/pacman.log, она будет работать до тех пор, пока вы не завершите ее вручную, нажав CTRL + C.

Однако, если вы запустите его вместе с командой timeout, он будет автоматически убит через заданный интервал времени.

На всякий случай, если команда все еще выполняется даже после истечения времени ожидания, вы можете отправить сигнал уничтожения, как показано ниже.

$ timeout -k 20 10 tail -f /var/log/pacman.log

В этом случае, если команда tail все еще выполняется через 10 секунд, команда timeout отправит ему сигнал уничтожения через 20 секунд и завершит его.

Команда Tmeout может быть особенно полезна при устранении неполадок оборудования.

Например, выполните следующую команду, чтобы отобразить все сообщения из кольцевого буфера ядра, но только в течение 10 секунд.

$ timeout 10 dmesg -w

Для более подробной информации, обратитесь к справочным страницам.

$ man timeout
Иногда для завершения конкретной программы может потребоваться много времени, что может привести к зависанию системы.
В таких случаях вы можете использовать этот трюк для автоматического завершения процесса через определенное время.
Кроме того, рассмотрите возможность использования Cpulimit, простого приложения для ограничения использования процессора процессом. Для более подробной информации, проверьте следующую ссылку.

Способ 2 – Использование программы Timelimit

Утилита Timelimit выполняет заданную команду с предоставленными аргументами и завершает порожденный процесс через заданное время с заданным сигналом.

Сначала он пропустит предупреждающий сигнал, а затем по истечении времени ожидания отправит сигнал уничтожения.

В отличие от утилиты тайм-аута, Timelimit имеет больше опций.

Вы можете передать количество аргументов, таких как killsig, warnsig, killtime, warntime и т. д.
Он доступен в стандартных репозиториях систем на основе Debian. Итак, вы можете установить его с помощью команды:
$ sudo apt-get install timelimit
Для систем на основе Arch он доступен в AUR.

Таким образом, вы можете установить его с помощью любых вспомогательных программ AUR, таких как Pacaur, Packer, Yay, Yaourt и т.д.

Для других дистрибутивов загрузите исходный код отсюда и установите его вручную.

После установки программы Timelimit выполните следующую команду в течение определенного времени, например, 10 секунд:

$ timelimit -t10 tail -f /var/log/pacman.log

Если вы запустите timelimit без каких-либо аргументов, он будет использовать значения по умолчанию: warntime = 3600 секунд, warnsig = 15, killtime = 120, killsig = 9.

Для получения дополнительной информации см. Справочные страницы и веб-сайт проекта, приведенные в конце данного руководства.

$ man timelimit

 

You may also like

Leave a Comment