bash время выполнения скрипта

Bash-скрипт для расчета времени

Я пишу сценарий в bash, чтобы рассчитать время, прошедшее для выполнения моих команд, рассмотрим:

Я думаю, что моя логика верна, однако я в конечном итоге со следующей распечаткой:

» для выполнения этой задачи требуется несколько секунд. «

что-то не так с моей Строковой оценкой?

Я считаю, что переменные bash нетипизированы, мне бы хотелось, чтобы в bash был метод «string to integer».

8 ответов

Я считаю очень чистым использовать внутреннюю переменную «$SECONDS»

вы можете использовать Баша time ключевое слово здесь с соответствующей строкой формата

значение этого параметра используется как строка формата, указывающая, как информация о времени для трубопроводов с префиксом time зарезервированное слово должно отображаться. The’’ вводит escape-последовательность, которая расширяется до значения времени или другой информации. Этот escape-последовательности и их описания; подтяжки обозначить необязательные части.

необязательный элемент l указывает более длинный формат, включая минуты, формы MMmSS.ФФС. значение p определяет, является ли фракция включена.

если эта переменная не задана, Bash действует так, как если бы она имела значение

если значение равно null, отображается информация о времени. Конечная новая строка добавляется при отображении строки формата.

попробуйте следующий код:

попробуйте использовать время с прошедшего секунд:

см. страницу Time man:

пользователям оболочки bash необходимо использовать явный путь для запуска команда внешнего времени, а не встроенный вариант оболочки. По системе где время установлено в /usr/ bin, первым примером будет / usr / bin / time wc /и т. д./хосты

Источник

Использование команды Sleep в скриптах Bash в Linux

Главное меню » Операционная система Linux » Использование команды Sleep в скриптах Bash в Linux

bash время выполнения скрипта

Команда sleep в Linux – одна из самых простых команд. Как видно из названия, его единственная функция – спать. Другими словами, он вводит задержку на указанное время.

Таким образом, если вы используете команду sleep с x, то следующая команда может быть запущена только через x секунд.

Команда Sleep имеет простой синтаксис:

Здесь суффикс может быть:

Давайте посмотрим несколько примеров команды sleep.

Примеры команды Sleep в Bash

Хотя вы можете использовать его непосредственно в оболочке, команда sleep обычно используется для введения задержки в выполнение сценария bash. Мы собираемся показать использование команды sleep через примеры сценариев bash.

Команда sleep без суффикса считается в секундах

Предположим, вы хотите приостановить ваш bash-скрипт на 5 секунд, вы можете использовать режим sleep следующим образом:

В примере скрипта bash это может выглядеть так:

Если вы запустите его с помощью команды time, вы увидите, что скрипт bash на самом деле работал (немного) более 5 секунд.

Команда Sleep с суффиксом m, h или d

Вы можете указать время sleep в минутах следующим образом:

Это приостановит скрипт/оболочку на одну минуту. Если вы хотите отложить сценарий на несколько часов, вы можете сделать это с помощью опции h:

Даже если вы хотите приостановить скрипт на несколько дней, вы можете сделать это с помощью суффикса d:

Это может помочь, если вы хотите работать в разные дни или дни недели.

Команда sleep с комбинацией секунд, минут, часов и дня

Вы не обязаны использовать только один суффикс за раз. Вы можете использовать более одного суффикса, и продолжительность sleep является суммой всех суффиксов.

Например, если вы используете следующую команду:

Это заставит скрипт ждать 1 час 10 минут и 5 секунд. Обратите внимание, что суффикс s здесь по-прежнему необязателен.

Бонусный совет: спать меньше секунды

Вы могли заметить, что наименьшая единица времени в команде sleep – секунда. Но что если ваш bash-скрипт будет спать в течение миллисекунд?

Хорошо, что вы можете использовать с плавающей точкой (десятичные точки) с командой sleep.

Поэтому, если вы хотите ввести паузу в 5 миллисекунд, используйте ее следующим образом:

Вы также можете использовать десятичные точки с другими суффиксами.

Будет введена задержка в 1 час 37 минут и 30 секунд.

Если у вас есть вопросы или предложения, пожалуйста, не стесняйтесь спрашивать.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Вывести время выполнения команд в Linux

Измерить время выполнения команды в Linux не просто, а очень просто. Но это только на первый взгляд. Давайте посмотрим на команду time более внимательно.

Команда time

Вызов консольной команды time

Если стоит задача измерить только время выполнения команды в Linux, то все что вам необходимо — команда time.

Синтаксис данной команды очень простой:

Пример вызова — замеряем время выполнения команды sleep 1:

Другой time

Теперь разберемся, что же за команду мы выполняем:

Вот оно что! Оказывается, time, который мы вызывали — это внутренняя команда Shell.

А теперь попробуем сделать так:

А это уже внешняя команда, расположенная по пути: /usr/bin.

Попробуем вызвать ее:

Параметры вызова внешней команды time

Перенаправление вывода статистики в файл, вместо вывода в стандартный поток ошибок. По умолчанию, существующий файл будет полностью перезаписан.

Применяется для сбора статистики из программ с пользовательским интерфейсом или выводящих информацию в поток ошибок.

Используется шаблон FORMAT для вывода статистики.

Формат вывода по умолчанию:

%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
%Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps

Описание используемых шаблонов приведено в конце статьи.

Выводит информацию по стандарту POSIX 1003.2:
real %e
user %U
sys %S

Внешний time по умолчанию

Чтобы явно указать, какую из команд мы хотим вызвать, можно воспользоваться следующим способом:

Для того, чтобы по умолчанию запускалась внешняя команда time достаточно выполнить:

Это установит внешнюю команду time по умолчанию для текущей сессии.

Чтобы применить эти изменения для всех последующих сессий, добавьте команду alias в файл

/.bashrc (изменения для текущего пользователя) или /etc/bash.bashrc (изменения затронут всех пользователей системы).

Измерение времени выполнения команд в скриптах

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

Для этого в исследуемый скрипт добавим немного кода:

Источник

How to get execution time of a script effectively?

I would like to display the completion time of a script.

18 Answers 18

Just use time when you call the script:

bash время выполнения скрипта

If time isn’t an option,

or, if you need sub-second precision and have bc installed,

Just call times without arguments upon exiting your script.

To preserve the exit status of your script, you can make it:

Or you can also add a trap on EXIT :

That way, times will be called whenever the shell exits and the exit status will be preserved.

bash время выполнения скрипта

I’m a bit late to the bandwagon, but wanted to post my solution (for sub-second precision) in case others happen to stumble upon this thread through searching. The output is in format of days, hours, minutes, and finally seconds:

Hope someone out there finds this useful!

My method for bash :

bash время выполнения скрипта

Personally, I like to wrap all my script code in some «main» function like so:

Notice how easy is to use the time command in this scenario. Obviously you’re not measuring the precise time including script parse time, but I find it accurate enough in most situations.

Yes, this calls Python, but if you can live with that then this is quite a nice, terse solution.

This question is quite old but in trying to find my favorite way of doing it this thread came up high. and I’m surprised no one mentioned it:

‘perf’ is a performance analyzing tool included in the kernel under ‘tools/perf’ and often available to install as a separate package (‘perf’ in CentOS and ‘linux-tools’ on Debian/Ubuntu). The Linux Kernal perf Wiki has much more information about it.

Running ‘perf stat’ gives quite a bit of details including average execution time right at the end:

bash время выполнения скрипта

A small shell function that can be added before commands to measure their time:

Then use it in your script, or on your command line like so:

1.020 sec, as shown here:

What a beautiful thing. You can put any command after it, and it outputs the result in a nice, human-readable form. I really like to use it for timing builds. Ex:

. or for git operations which can potentially be really long, so I can develop realistic mental expectations:

Note that dt_min gets rounded from 0.01666666666. (1 second = that many minutes) to 0.017 in this case since I’m using the printf function to round. The sleep 1; part below is where you’d call your script to run and time, but I’m just sleeping for 1 second instead for the sake of this demo.

Related:

Using only bash it is also possible to measure and calculate the time duration for a portion of the shell script (or the elapsed time for the entire script):

you can now either just print the difference:

if you only need incremental duration do:

You can also store the duration in a variable:

bash время выполнения скрипта

Use bash time builtin?

bash время выполнения скрипта

But if you need an efficient solution to get the times with millisecond precision and need them into variables such that the original output remains undisturbed you may combine process substitution with some redirections around time which is much faster than calling external programs and allows redirections around the timing wrapper script as on the original command/script.

Longer variant that keeps original stdout and stderr separate of each other:

You can even fake a floating point addition in bash without calling bc which would be much slower:

Источник

Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями

bash время выполнения скрипта

В прошлый раз мы говорили о работе с потоками ввода, вывода и ошибок в bash-скриптах, о дескрипторах файлов и о перенаправлении потоков. Сейчас вы знаете уже достаточно много для того, чтобы писать что-то своё. На данном этапе освоения bash у вас вполне могут возникнуть вопросы о том, как управлять работающими скриптами, как автоматизировать их запуск.

bash время выполнения скрипта

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

Сигналы Linux

В Linux существует более трёх десятков сигналов, которые генерирует система или приложения. Вот список наиболее часто используемых, которые наверняка пригодятся при разработке сценариев командной строки.

Код сигналаНазваниеОписание
1SIGHUPЗакрытие терминала
2SIGINTСигнал остановки процесса пользователем с терминала (CTRL + C)
3SIGQUITСигнал остановки процесса пользователем с терминала (CTRL + \) с дампом памяти
9SIGKILLБезусловное завершение процесса
15SIGTERMСигнал запроса завершения процесса
17SIGSTOPПринудительная приостановка выполнения процесса, но не завершение его работы
18SIGTSTPПриостановка процесса с терминала (CTRL + Z), но не завершение работы
19SIGCONTПродолжение выполнения ранее остановленного процесса

Если оболочка bash получает сигнал SIGHUP когда вы закрываете терминал, она завершает работу. Перед выходом она отправляет сигнал SIGHUP всем запущенным в ней процессам, включая выполняющиеся скрипты.

Bash-скрипты не контролируют эти сигналы, но они могут распознавать их и выполнять некие команды для подготовки скрипта к последствиям, вызываемым сигналами.

Отправка сигналов скриптам

Оболочка bash позволяет вам отправлять скриптам сигналы, пользуясь комбинациями клавиш на клавиатуре. Это оказывается очень кстати если нужно временно остановить выполняющийся скрипт или завершить его работу.

Завершение работы процесса

Комбинация клавиш CTRL + C генерирует сигнал SIGINT и отправляет его всем процессам, выполняющимся в оболочке, что приводит к завершению их работы.

Выполним в оболочке такую команду:

bash время выполнения скрипта

Завершение работы процесса с клавиатуры

Временная остановка процесса

bash время выполнения скрипта

Число в квадратных скобках — это номер задания, который оболочка назначает процессу. Оболочка рассматривает процессы, выполняющиеся в ней, как задания с уникальными номерами. Первому процессу назначается номер 1, второму — 2, и так далее.

Если вы приостановите задание, привязанное к оболочке, и попытаетесь выйти из неё, bash выдаст предупреждение.

Просмотреть приостановленные задания можно такой командой:

bash время выполнения скрипта

Выглядит её вызов так:

Перехват сигналов

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

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

bash время выполнения скрипта

Перехват сигнала выхода из скрипта

Перехватить сигнал выхода из скрипта можно, использовав при вызове команды trap имя сигнала EXIT :

bash время выполнения скрипта

Перехват сигнала выхода из скрипта

Модификация перехваченных сигналов и отмена перехвата

Для модификации перехваченных скриптом сигналов можно выполнить команду trap с новыми параметрами:

bash время выполнения скрипта

Модификация перехвата сигналов

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

И нажмём CTRL + C на клавиатуре.

bash время выполнения скрипта

Сигнал, перехваченный до отмены перехвата

Выполнение сценариев командной строки в фоновом режиме

Иногда bash-скриптам требуется немало времени для выполнения некоей задачи. При этом вам может понадобиться возможность нормально работать в командной строке, не дожидаясь завершения скрипта. Реализовать это не так уж и сложно.

Запустим его, указав после имени символ амперсанда ( & ):

Это приведёт к тому, что он будет запущен как фоновый процесс.

bash время выполнения скрипта

Запуск скрипта в фоновом режиме

Скрипт будет запущен в фоновом процессе, в терминал выведется его идентификатор, а когда его выполнение завершится, вы увидите сообщение об этом.

bash время выполнения скрипта

При таком подходе, если выйти из терминала, скрипт, выполняющийся в фоне, так же завершит работу.

Что если нужно, чтобы скрипт продолжал работать и после закрытия терминала?

Выполнение скриптов, не завершающих работу при закрытии терминала

Применим эту методику при запуске нашего скрипта:

Вот что будет выведено в терминал.

bash время выполнения скрипта

Просмотр заданий

Команда jobs позволяет просматривать текущие задания, которые выполняются в оболочке. Напишем такой скрипт:

bash время выполнения скрипта

Запуск и приостановка скрипта

Запустим тот же скрипт в фоновом режиме, при этом перенаправим вывод скрипта в файл так, чтобы он ничего не выводил на экране:

bash время выполнения скрипта

Получение сведений о скриптах

Перезапуск приостановленных заданий

bash время выполнения скрипта

Теперь скрипт выполняется в фоновом режиме.

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

Для перезапуска задания в обычном режиме воспользуйтесь командой fg :

Планирование запуска скриптов

Вызов команды at выглядит так:

Эта команда распознаёт множество форматов указания времени.

bash время выполнения скрипта

Планирование заданий с использованием команды at

Для того чтобы посмотреть список заданий, ожидающих выполнения, можно воспользоваться командой atq :

bash время выполнения скрипта

Список заданий, ожидающих выполнения

Удаление заданий, ожидающих выполнения

bash время выполнения скрипта

Запуск скриптов по расписанию

Планирование однократного запуска скриптов с использованием команды at способно облегчить жизнь во многих ситуациях. Но как быть, если нужно, чтобы скрипт выполнялся в одно и то же время ежедневно, или раз в неделю, или раз в месяц?

Crontab выполняется в фоне и, основываясь на данных в так называемых cron-таблицах, запускает задания по расписанию.

При планировании запуска скрипта по расписанию crontab принимает данные о том, когда нужно выполнить задание, в таком формате:

Например, если надо, чтобы некий скрипт с именем command выполнялся ежедневно в 10:30, этому будет соответствовать такая запись в таблице заданий:

Здесь универсальный символ « * », использованный для полей, задающих день месяца, месяц и день недели, указывает на то, что cron должен выполнять команду каждый день каждого месяца в 10:30.

Если, например, надо, чтобы скрипт запускался в 4:30PM каждый понедельник, понадобится создать в таблице заданий такую запись:

Нумерация дней недели начинается с 0, 0 означает воскресенье, 6 — субботу. Вот ещё один пример. Здесь команда будет выполняться в 12 часов дня в первый день каждого месяца.

Затем можно вводить команды формирования расписания:

Благодаря этой команде скрипт будет вызываться ежедневно в 10:30. Если вы столкнётесь с ошибкой «Resource temporarily unavailable», выполните нижеприведённую команду с правами root-пользователя:

Организовать периодический запуск скриптов с использованием cron можно ещё проще, воспользовавшись несколькими специальными директориями:

Если поместить файл скрипта в одну из них, это приведёт, соответственно, к его ежечасному, ежедневному, еженедельному или ежемесячному запуску.

Запуск скриптов при входе в систему и при запуске оболочки

Автоматизировать запуск скриптов можно, опираясь на различные события, такие, как вход пользователя в систему или запуск оболочки. Тут можно почитать о файлах, которые обрабатываются в подобных ситуациях. Например, это следующие файлы:

Итоги

Сегодня мы разобрали вопросы, касающиеся управления жизненным циклом сценариев, поговорили о том, как запускать скрипты в фоне, как планировать их выполнение по расписанию. В следующий раз читайте о функциях в bash-скриптах и о разработке библиотек.

Уважаемые читатели! А вы пользуетесь средствами планирования запуска сценариев командной строки по расписанию? Если да — расскажите пожалуйста о них.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *