На днях я переносил большой файл с помощью rsync в другую систему в моей локальной сети.
Поскольку это очень большой файл, для его завершения потребовалось около 20 минут.
Я не хочу ждать так долго, а также я не хочу вручную завершать процесс нажатием CTRL + C.
Мне просто интересно, могут ли быть какие-нибудь простые способы запустить команду в течение определенного времени и автоматически убить ее, как только истечет время в Unix-подобных операционных системах – отсюда и этот пост.
Выполнить команду в течение определенного времени в Linux
Метод 1 – Использование команды «timeout»
Команда timeout является частью пакета GNU coreutils, поэтому она предустановлена во всех системах GNU / Linux.
Допустим, вы хотите запустить команду только в течение определенного времени, а затем автоматически убить ее по истечении этого времени. Для этого мы используем:
$ timeout <time-limit-interval> <command>
Например, следующая команда прекратит работу через 10 секунд.
$ timeout 10s tail -f /var/log/pacman.log
$ 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
Способ 2 – Использование программы Timelimit
Сначала он пропустит предупреждающий сигнал, а затем по истечении времени ожидания отправит сигнал уничтожения.
В отличие от утилиты тайм-аута, Timelimit имеет больше опций.
$ sudo apt-get install timelimit
Таким образом, вы можете установить его с помощью любых вспомогательных программ 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