- Команда wait в Bash
- Команда wait Bash
- Примеры
- Вывод
- Команда Linux timeout объяснение для начинающих (с примерами)
- Команда timeout Linux
- Вопрос 1. Как использовать команду timeout?
- Вопрос 2. Как получить статус вывода команды?
- Вопрос 3. Как изменить время ожидания сигнала?
- Вопрос 4. Как сделать так, чтобы тайм-аут автоматически отправлял сигнал KILL?
- Заключение
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Использование timeout в Linux с примерами
- Как взять timeout — об использовании команды
- Базовый синтаксис
- Сообщение с космосом или отправка определенного сигнала исполняемому процессу
- Как убить процесс, если он завис
- Сохраняем статус
- Запуск команды явно, а не за кулисами
- Заключение
- Как запустить команду на определенное время в Linux
- Выполнить команду в течение определенного времени в Linux
- Метод 1 – Использование команды « timeout »
- Полезные команды Linux
- Создание папок в терминале
- Ожидать завершения команды и выключить компьютер
- Повторить последнюю команду
- Вызвать последнюю команду которая начиналась с символов
- Посмотреть ip адрес
- Форматирование вывода
- Динамический просмотр лога
- Очистить терминал
- Подключение RAM диска
- Узнать архитектуру системы
- Открыть файл на определенной строке
- Время выполнения команды
- Автоматическое удаление старых файлов
- Убить все процессы из консоли
- Создать пустой файл
- Завершение
Команда wait в Bash
wait — это команда, которая ожидает завершения заданных заданий и возвращает статус выхода ожидаемой команды.
Поскольку команда wait влияет на текущую среду выполнения оболочки, в большинстве оболочек она реализована как встроенная команда.
В этой статье мы рассмотрим встроенную команду wait
Команда wait Bash
Общий синтаксис wait имеет следующий вид:
ID — это идентификатор процесса или задания. Если ID не указан, команда ожидает завершения всех дочерних фоновых заданий.
Команда wait возвращает статус выхода последней ожидаемой команды.
Например, чтобы дождаться фонового процесса с PID 7654 , вы должны использовать:
Когда задано несколько процессов, команда ожидает завершения всех процессов.
Задания указываются с использованием спецификации задания («спецификация задания»), которая является способом ссылки на процессы, составляющие задание. Спецификация задания начинается с символа процента, за которым следует номер задания ( %n ). Вот пример:
Идентификатор задания оболочки (в скобках) и идентификатор процесса будут отображаться на вашем терминале:
Чтобы дождаться задания, запустите команду wait за которой следует спецификация задания:
При вызове с параметром -n команда ожидает завершения только одного задания из заданных pid или заданий и возвращает статус завершения. Если аргументы не указаны, wait -n ожидает завершения любого фонового задания и возвращает статус завершения задания.
В приведенном выше примере wait -n выводит только статус возврата задания, которое завершается первым; он не показывает PID задания. Если вы хотите получить идентификатор задания или спецификацию задания, для которого возвращается статус выхода, используйте параметр -p чтобы присвоить его переменной:
-p был представлен в Bash 5.1. Если вы используете старую версию Bash, вы получите ошибку «неверный вариант».
Параметр -f сообщает wait чтобы дождаться фактического завершения каждого pid или jobpec, прежде чем возвращать свой код выхода, вместо того, чтобы возвращаться при изменении статуса задания. Эта опция действительна, только если включено управление заданиями. По умолчанию управление заданиями включено только для интерактивных запросов.
Примеры
wait обычно используется в сценариях оболочки, которые порождают дочерние процессы, выполняющиеся параллельно.
Чтобы проиллюстрировать, как работает команда, создайте следующий сценарий:
Давайте объясним код построчно:
- Первая строка называется shebang и сообщает операционной системе, какой интерпретатор использовать для анализа остальной части файла.
- Мы используем команду sleep для имитации трудоемкого фонового процесса.
- $! — это внутренняя переменная Bash, в которой хранится PID последнего задания, запущенного в фоновом режиме. В этом примере это PID команды перехода в sleep . Мы сохраняем PID в переменной ( process_id ).
- Печатает номер PID.
- PID передается команде wait которая ожидает завершения команды sleep
- Печатает статус выхода команды wait . $? — это внутренняя переменная Bash, которая содержит статус выхода последней выполненной команды.
Если вы запустите сценарий, он напечатает что-то вроде этого:
Вот пример использования опции -n
Когда скрипт выполняется, он порождает 3 фоновых процесса. wait -n ожидает завершения первого задания и вывода оператора echo. wait ожидает завершения всех дочерних фоновых заданий.
Последний пример объясняет параметр -f . Откройте терминал и запустите:
Откройте другой терминал и остановите процесс командой kill :
После изменения статуса процесса команда wait завершится и вернет код завершения процесса.
Теперь повторите те же шаги, но на этот раз используйте wait -f $pid :
Остановите процесс с другого терминала:
На этот раз команда wait не завершится. Он будет работать до тех пор, пока не sleep процесс.
Вывод
Команда wait ожидает завершения указанных заданий и возвращает код завершения задания.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Команда Linux timeout объяснение для начинающих (с примерами)
Иногда, когда вы выполняете команду в Linux, вам может потребоваться запустить ее в течение определенного периода времени.
Существует утилита командной строки – timeout – которая специально разработана для этой цели.
В этой статье мы обсудим основы этой команды на нескольких простых для понимания примерах.
Но прежде чем сделать это, стоит упомянуть, что все примеры в этом руководстве были протестированы на машине с Ubuntu 18.04 LTS.
Команда timeout Linux
Как следует из названия, команда timeout в Linux позволяет вам выполнять команду с ограничением по времени.
Ниже приводится ее синтаксис:
Ниже приведены примеры в стиле вопрос / ответ, которые должны дать вам лучшее представление о том, как работает этот инструмент.
Вопрос 1. Как использовать команду timeout?
Основное использование довольно просто – просто запустите ‘timeout’, указав во входных данных значение времени ожидания (в секундах), а также команду, которую вы хотите выполнить.
Например, если вы хотите тайм-аут команды ping через 5 секунд, вот как вы можете использовать тайм-аут в этом случае.
Вопрос 2. Как получить статус вывода команды?
По умолчанию, если команда timeout успешна, она возвращает 124 в качестве состояния выхода. Ниже приведен пример:
В первом случае я позволил команде timeout успешно работать, и, как вы можете видеть, статус вывода был 124.
Однако во время второго запуска я принудительно убил команду, используя Ctrl + C, и в этом случае, статус выхода был 0.
Но в случае, если вы хотите, чтобы тайм-аут возвратил статус входной команды, даже если тайм-аут прошел успешно, вам придется использовать параметр командной строки –preserve-status.
Вопрос 3. Как изменить время ожидания сигнала?
Нет смысла гадать, что тайм-аут работает, посылая сигнал входной команде, чтобы последняя прекратила выполнение к приближающемуся сроку.
По умолчанию SIGTERM используется командой.
Однако, если вы хотите, вы можете изменить сигнал, отправляемый по таймауту.
Для этого вам нужно будет использовать параметр командной строки -s и указать в качестве входного сигнала сигнал, который вы хотите отправить по таймауту.
Чтобы получить список доступных сигналов, которые вы можете отправить, выполните следующую команду:
Вопрос 4. Как сделать так, чтобы тайм-аут автоматически отправлял сигнал KILL?
Иногда вы можете встретить входную команду, которая продолжает выполняться даже после того, как тайм-аут отправляет начальный сигнал.
Для подобных случаев timeout предлагает опцию –kill-after.
Вот как man-страница объясняет это:
Итак, как вы можете видеть, вам нужно указать продолжительность, чтобы сообщить тайм-ауту, через сколько времени должен быть отправлен этот сигнал.
Заключение
В зависимости от того, какую работу вы выполняете, команда timeout может оказаться весьма удобным инструментом.
Здесь, в этом руководстве, мы обсудили большинство вариантов, предлагаемых этой утилитой.
Как только вы закончите практиковать их, вы можете узнать больше о тайм-ауте, перейдя на его справочную страницу.
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Использование timeout в Linux с примерами
Все имеет начало и конец
3 минуты чтения
Вот вы пользователь Linux машины. И вот вам захотелось запустить какую-нибудь команду только на определенное время, и вы задаете вопрос — как это сделать? А вот как — использовать команду timeout .
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Как взять timeout — об использовании команды
Базовый синтаксис
Как и следовало ожидать, синтакс у команды экстремально прост: сама команда timeout — опции — длительность выполнения (можно даже с единицами измерения) — целевая команда
Единицы измерения для указания длительности:
- s — секунды (стоит по умолчанию)
- m — минуты
- h — часы
- d — дни
Если вы не укажете никакого параметра по длительности, команда не будет активирована.
- timeout 5 ping 1.1.1.1 — пингуем 1.1.1.1 5 секунд
- timeout 5m ping 1.1.1.1 — пингуем 1.1.1 5 минут
- timeout 5.5h ping 1.1.1.1 — 5,5 часов пингуем 1.1.1
Если у вас есть необходимость, можно запустить команду с добавкой sudo (если для целевой команды требуются права суперпользователя):
sudo timeout 100 tcpdump -n -w dump.pcap
Сообщение с космосом или отправка определенного сигнала исполняемому процессу
Если вы не указали какой-то особый сигнал, по умолчанию передается SIGTERM (сигнал о том, что надо бы мягко терминировать процесс). Однако, если вы укажете ключ -s после команды timeout, вы можете указать любой другой допустимый сигнал. К примеру: sudo timeout -s SIGKILL ping 1.1.1.1 или sudo timeout -s 9 ping 1.1.1.1
Обе команды выше идентичны, и если вы хотите увидеть весь список сигналов, просто введите kill -l
Как убить процесс, если он завис
Как вы уже поняли, SIGTERM — это сигнал, который отправляется после истечения таймаута, но он легко может быть проигнорирован процессом, и тогда процесс не остановится. Для уверенности в смерти процесса, нужно использовать ключ -k и некое временное значение. Тогда после окончания таймаута будет отправляться сигнал SIGKILL, который процесс не сможет проигнорировать при всем желании. В примере ниже команда выполняется одну минуту, и, если в течение 10 секунд после окончания таймаута она не «умирает», отправляется сигнал SIGKILL и «добивает» процесс:
sudo timeout -k 10 1m ping 1.1.1.1
Сохраняем статус
Команда timeout всегда возвращает значение 124 после истечения указанного времени или возвращает статус «exit» управляемой команды (той, что вы вводите после команды timeout). Таким образом, вы можете использовать ключ — -preserve-status :
timeout —preserve-status 10 ping 1.1.1.1
Запуск команды явно, а не за кулисами
По умолчанию, timout работает в бэкграунде, и если вы хотите обратного (вдруг после запуска управляемой команды потребуется какой-нибудь пользовательский ввод), нужно использовать ключ -foreground:
timeout —foreground 10m ./bestscripteva.sh
Заключение
В 99% процентов случаев команда timeout требует всего двух аргументов и ни одного факта: времени исполнения и самой исполняемой команды. Однако, вы теперь знаете и другие фишки использования этой замечательной команды.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Источник
Как запустить команду на определенное время в Linux
На днях я переносил большой файл с помощью rsync в другую систему в моей локальной сети.
Поскольку это очень большой файл, для его завершения потребовалось около 20 минут.
Я не хочу ждать так долго, а также я не хочу вручную завершать процесс нажатием CTRL + C.
Мне просто интересно, могут ли быть какие-нибудь простые способы запустить команду в течение определенного времени и автоматически убить ее, как только истечет время в Unix-подобных операционных системах – отсюда и этот пост.
Выполнить команду в течение определенного времени в Linux
Метод 1 – Использование команды « timeout »
Команда timeout является частью пакета GNU coreutils, поэтому она предустановлена во всех системах GNU / Linux.
Допустим, вы хотите запустить команду только в течение определенного времени, а затем автоматически убить ее по истечении этого времени. Для этого мы используем:
Например, следующая команда прекратит работу через 10 секунд.
Другие доступные суффиксы:
“m” в течение нескольких минут,
“h” Часы
“ d” в течение нескольких дней.
Если вы запустите эту команду tail -f /var/log/pacman.log, она будет работать до тех пор, пока вы не завершите ее вручную, нажав CTRL + C.
Однако, если вы запустите его вместе с командой timeout, он будет автоматически убит через заданный интервал времени.
На всякий случай, если команда все еще выполняется даже после истечения времени ожидания, вы можете отправить сигнал уничтожения, как показано ниже.
В этом случае, если команда tail все еще выполняется через 10 секунд, команда timeout отправит ему сигнал уничтожения через 20 секунд и завершит его.
Команда Tmeout может быть особенно полезна при устранении неполадок оборудования.
Например, выполните следующую команду, чтобы отобразить все сообщения из кольцевого буфера ядра, но только в течение 10 секунд.
Для более подробной информации, обратитесь к справочным страницам.
Источник
Полезные команды Linux
Терминал Linux очень гибкий и полезный инструмент. С помощью него можно сделать что угодно и во многих случаях даже намного эффективнее чем в графическом интерфейсе. Команды можно объединять между собой, перенаправлять вывод одной команды, на вход другой, комбинировать их различным образом.
Это делает их применение еще более эффективным. В сегодняшней статье я хочу поделиться несколькими полезными командами linux, которые я открыл для себя во время использования этой операционной системы и которыми до сих пор пользуюсь для автоматизации рутинных действий.
В качестве командной оболочки используется самая популярная — bash. Также для некоторых задач нам понадобится демон планирования выполнения задач cron.
Некоторые из этих команд упрощают выполнение той или иной задачи, некоторые полностью выполняют нужные действия за пользователя. Возможно, не все они будут вам полезны, так как, некоторые команды нужны только веб-мастерам, другие системным администраторам, а еще одни обычным домашним пользователям. Но давайте перейдем к списку полезные команды для линукс.
Создание папок в терминале
Для создания папки в терминале используется команда mkdir. Вот так она выглядит:
Но не все знают о ее дополнительных возможностях. Чтобы создать несколько вложенных папок используйте команду p:
mkdir -p /mnt/foo/bar/
Создать несколько папок за один раз:
Создать папку и перейти в нее:
mkdir /home/foo/doc/bar && cd $_
Кстати, синтаксис фигурных скобок поддерживают и другие команды для Linux терминала.
Ожидать завершения команды и выключить компьютер
Это скорее не команда, а небольшая стандартная функция оболочки Bash, о которой не все знают. Иногда нам нужно оставить на выполнение какую-нибудь долго работающую утилиту, например, обновление системы, а самим куда-то отойти. И при этом мы хотим чтобы после завершения работы утилиты компьютер автоматически выключился.
Можно просто объединить команды с помощью стандартного синтаксиса Bash. Для объединения используются символы && и ||. Первый — выполнить другую команду если первая завершилась успешно, второй если первая завершилась ошибкой.
Например, обновить систему и если все хорошо выключить PC:
apt update && apt upgrade && shutdown -h now
Или выключить компьютер если обновление не удалось:
apt update && apt upgrade || shutdown -h now
Или выключить независимо от того произошла ошибка или нет:
apt update && apt upgrade ; shutdown -h now
Здесь приведена команда обновления Ubuntu, но в других дистрибутивах нужно заменить эту команду на свою.
Повторить последнюю команду
Если мы уже начали говорить о возможностях Bash пойдем дальше. Символ !! означает выполнить последнюю команду. Часто ли у вас случалось такое, что вы набираете команду нажимаете Enter и понимаете, что для ее работы нужно было использовать sudo? Тогда приходиться набирать ту же команду только уже правильно. Но можно пойти другим путем, выполнить:
Кроме символа !! В Bash есть еще несколько указателей на команды:
- !^ — первый аргумент предыдущей команды;
- !$ — последний аргумент предыдущей команды;
- !* — все аргументы предыдущей команды;
- !-2 — вторая с конца команда;
- *— содержимое текущего каталога.
А вот так можно сохранить последнюю выполненную команду в скрипт:
Ещё о подобных возможностях Bash можно почитать здесь.
Вызвать последнюю команду которая начиналась с символов
И еще о возможностях Bash. Например, вы помните что подключались в последний раз к определенному узлу по SSH, и теперь вам нужно подключиться к нему снова. Чтобы не вводить полностью команду можно набрать знак «!» и символы с которых начиналась команда:
Будет выполнена последняя команда, которая начиналась на ssh.
Посмотреть ip адрес
Часто возникает необходимость быстро узнать ip адрес своей машины. Для этого есть легко запоминающаяся команда, использующая curl и сайт ifconfig.me:
Форматирование вывода
Многие команды Linux выводят данные, разделяя столбцы пробелами. Одна из них mount. И естественно, в этом выводе трудно что-либо разобрать. Для разделения столбцов табуляциями используйте утилиту column:
mount | column -t
Динамический просмотр лога
Допустим, есть у нас лог файл в который пишется определенная информация и мы хотим видеть все изменения сразу, на лету. Тогда используйте команду tail с опцией -f:
tail -f /адрес/лог/файла
Будет выведено 8 последних строк из лога файла, а затем они будут постоянно обновляться.
Очистить терминал
Вывод команд, если во время их разработки были допущены некоторые ошибки может сломать форматирование строк терминала. Или просто может понадобится стереть всю лишнюю информацию. Для этого есть аж две полезные команды linux, первая:
Первая только переводит курсор вверх страницы, вторая добавляет несколько пустых строк. Ещё можно сбросить терминал нажав сочетание клавиш Ctrl+L.
Подключение RAM диска
Если вам нужно немного дискового пространства с высокой скоростью работы, в Linux можно легко подключить немного оперативной памяти в корневую файловую систему:
mount -t tmpfs tmpfs /mnt -o size=1024m
В папку /mnt будет подключен RAM диск размером 1024 мегабайт.
Узнать архитектуру системы
Этой простой командой можно быстро узнать разрядность системы:
Открыть файл на определенной строке
Это не команда, а просто малоизвестная функция консольных редакторов. Очень полезная для программистов. Вот, например, сообщает программа, что у вас ошибка в 55 строке, вместо того чтобы самому искать ту сроку просто набираете:
nano +55 /sourcefile
vim +55 /sourcefile
И оказываетесь сразу на нужной строке.
Время выполнения команды
Хотите узнать сколько времени выполняется та или иная команда? Просто добавьте перед ней вызов утилиты time. Например:
Эту команду также можно использовать в качестве секундомера. Просто выполните:
А затем нажмите Ctrl+D когда нужно будет узнать сколько времени прошло.
Автоматическое удаление старых файлов
Все мы часто качаем файлы из интернета, это торренты, фильмы, музыка и т д. И все это со временем накапливается в папке загрузки если ненужное вовремя не удалять, а нужное не перемещать в другие папки. Тогда папка загрузок начинает напоминать огромную свалку где вообще нереально что-то найти. У себя я всегда время от времени сортировал и удалял файлы, но когда видел такое у знакомых брался за голову. Есть способ упростить очистку папки загрузок.
Утилита find позволяет находить все файлы, созданные позже определенной даты и выполнять с ними нужное действие. Все нужные файлы будем вовремя рассортировывать и перемещать по папкам назначения, а все что останутся в загрузках будут через два дня автоматически удаляться. Знание что файлы будут удалены заставит их вовремя переместить куда нужно.
Вот так выглядит сама команда:
find /home/user/Downloads/ -type f -mtime +180 -exec ‘rm -f <>‘
Если не хотите полностью удалять файлы можно перемещать их в корзину:
find /home/user/Downloads/ -type f -mtime +180 -exec ‘mv <>
Подробнее о работе find можно почитать тут. Для полной автоматизации добавим выполнение этой команды каждый день в расписание cron:
0 0 * * * find /home/user/Downloads/ -type f -mtime +180 -exec ‘rm -f <>‘
Теперь давние файлы будут автоматически удаляться каждый день.
Убить все процессы из консоли
Если у вас небольшое количество оперативной памяти на компьютере и вы любите открывать очень много вкладок в Chromium, то программа а вместе с ней и окружение рабочего стола могут прочно зависать. Браузер создает для каждой вкладки отдельный процесс, поэтому пока планировщик памяти ядра поймет кто виноват в сбое и что нужно делать уйдет много времени, а пытаться убить каждую вкладку по отдельности очень долгое занятие. Есть команда, с помощью которой можно из терминала одним махом закрыть все вкладки:
ps aux | grep chromium | awk ‘
Или намного проще:
Здесь мы получаем список всех процессов в ps, выбираем из них chromium, потом отбираем второй столбец, то есть PID, и с помощью xargs вызываем kill для каждой вкладки. Точно таким же способом можно уничтожить любое приложение создающее много процессов.
Создать пустой файл
Иногда возникает необходимость создать пустой файл, например, когда он нужен для конфигурации какого-либо сервиса или чего-то тому подобного. Для этого можно воспользоваться командой touch:
Для создания файла определённого размера надо использовать команду dd:
dd if=/dev/zero of=/путь/к/файлу bs=1M count=размер_в_мегабайтах
Завершение
Вот и подошли к концу наш список. Если вы знаете другие полезные команды Linux, поделитесь ими в комментариях!
Источник