Пауза в скриптах linux

Bash Sleep Command: A Quick Guide to Use It in Your Scripts

The Bash sleep command delays the execution of the command after it for a given amount of time. The sleep time is expressed in seconds. The use of the sleep command is common when scheduling a task every X seconds or when a script relies on another script to complete its execution.

Let’s look at three scenarios in which you would use the sleep command:

  1. Instead of running a command immediately, you want to schedule its execution X seconds in the future.
  2. A program takes long time to process a set of files and when the processing is complete it generates a file to indicate that. You can write a script that checks if that file exists and sleeps for a certain period of time if it doesn’t. Otherwise executes the next step of the process based on the files generated by the first program.
  3. You are calling a third party API programmatically and you know that the API doesn’t allow more than 60 requests per minute. Sleeping for X seconds allows you to make sure you don’t go over the number of requests per minute allowed by the API provider.

Basic Syntax of the Bash Sleep Command

The basic syntax of the sleep command in Bash is very simple:

Here is what happens if you run it in the command line:

[ec2-user@ip-172-1-2-3 ~]$ sleep 5 [ec2-user@ip-172-1-2-3 ~]$ 

In this case after executing the sleep 5 command Linux returns the shell back after 5 seconds.

And now let’s move to three practical examples of how to you the Bash sleep command.

Scenario 1: Sleep Command that Delays the Execution of Another Command in a Bash Script

I will write a simple Bash shell script to show the exact behaviour of the sleep command…

…considering that the previous example couldn’t really show that the sleep command returned the shell back after 5 seconds.

Let’s write a script that does what I have explained in Scenario 1, it delays the execution of a command by X seconds (in this case 5 seconds).

It’s almost like executing a command at a specific time following the same principle of job schedulers.

So, create a very simple Bash shell script called delay_cmd.sh :

#!/bin/bash date sleep 5 date uptime 

The date command is used to print the current date before and after the sleep command, in this way you can see that the script is suspended for 5 seconds.

Читайте также:  Программирование на linux для начинающих

After 5 seconds the uptime command is executed.

[ec2-user@ip-172-1-2-3 test_scripts]$ ./delay_cmd.sh Tue 7 Apr 22:21:17 UTC 2020 Tue 7 Apr 22:21:22 UTC 2020 22:21:22 up 8 days, 1:03, 1 user, load average: 0.00, 0.00, 0.00 

In theory we can write the same script in a single line:

#!/bin/bash date; sleep 5; date; uptime 

This is because the semicolon is used in Linux to separate different commands and execute them sequentially.

In other words, Linux makes sure each command completes before executing the next one.

Scenario 2: Bash Script that Uses the Sleep Command to Wait for Another Script to Complete

In this example I will create two scripts:

  1. program_1.sh: sleeps for 30 seconds and then it creates a file called stage1.complete. This basically simulates a program that takes long time to complete a specific task and confirms the completion of its execution by creating the stage1.complete file.
  2. program_2.sh: uses a while loop and at every iteration checks if the stage1.complete file exists. If it doesn’t it sleeps for 6 seconds, if the file exists it prints the message “File stage1.complete exists. Stage 1 complete, starting Stage 2…“.

Here is program_1.sh:

#!/bin/bash sleep 30 touch stage1.complete 

The touch command is used by the first program to create the stage1.complete file after 30 seconds from the moment the script is executed.

And program_2.sh is the following, we will be using a Bash if else statement to implement it:

#!/bin/bash while true do if [ ! -f stage1.complete ]; then echo "File stage1.complete doesn't exist. Sleeping for 6 seconds. " sleep 6 else echo "File stage1.complete exists. Stage 1 complete, starting Stage 2. " rm stage1.complete exit fi done 

In the second Bash shell script we have an infinite loop. At every iteration the script:

  • Checks if the file stage1.complete is present.
  • If the file doesn’t exist it sleeps for 6 seconds
  • If the file exists it removes the stage1.complete file and stops the execution using the Bash exit command.

Before executing the two scripts make sure they are both executable using the chmod +x command:

We will run program_1.sh first, we will run it in the background so that we can run program_2.sh immediately after that in the same terminal:

[ec2-user@ip-172-1-2-3 ]$ ./program_1.sh & [1] 13527 [ec2-user@ip-172-1-2-3 ]$ ./program_2.sh File stage1.complete doesn't exist. Sleeping for 6 seconds. File stage1.complete doesn't exist. Sleeping for 6 seconds. File stage1.complete doesn't exist. Sleeping for 6 seconds. File stage1.complete doesn't exist. Sleeping for 6 seconds. File stage1.complete doesn't exist. Sleeping for 6 seconds. File stage1.complete exists. Stage 1 complete, starting Stage 2. [1]+ Done ./program_1.sh 

As expected the second script keeps sleeping for 6 seconds until it finds the file stage1.complete file, and then it stops it execution.

Scenario 3: Sleep Command to Control the Number of Calls to a Third Party API

If you want to call an API using a Bash script you can use the curl command.

Читайте также:  Usb network gate установка linux

Using curl to call an API is simple, let’s take for example the following API endpoint:

https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22 

We will write a Bash script that uses curl to perform a GET request against it and uses the sleep command to limit the number of API calls in a certain period of time.

This is done to avoid going over any potential limits imposed by the API provider.

This is the script I have written:

#!/bin/bash COUNTER=1 while [ $COUNTER -lt 3 ] do printf "\n\n### Executing API call number $COUNTER (`date`) ###\n\n" curl "https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22" COUNTER=$(($COUNTER+1)) sleep 10 done 

Few things about this script:

  • The COUNTER variable is used to count the number of API calls to be executed before exiting from the while loop.
  • cURL is used to perform the GET requests against the API endpoint.
  • At every iteration of the while loop we suspend the script for 10 seconds with the sleep command to limit the number of API calls to one every 10 seconds.
  • We increment the COUNTER variable using the arithmetic operator $(( )).
[ec2-user@ip-172-1-2-3 ]$ ./call_api.sh ### Executing API call number 1 (Tue 7 Apr 23:23:14 UTC 2020) ### ,"weather":[],"base":"stations","main":,"visibility":10000,"wind":,"clouds":,"dt":1485789600,"sys":,"id":2643743,"name":"London","cod":200> ### Executing API call number 2 (Tue 7 Apr 23:23:25 UTC 2020) ### ,"weather":[],"base":"stations","main":,"visibility":10000,"wind":,"clouds":,"dt":1485789600,"sys":,"id":2643743,"name":"London","cod":200> [ec2-user@ip-172-1-2-3 ]$ 

As expected two API calls are executed and then the execution of the while loop stops because the value of the variable COUNTER is 3.

Conclusion

I have showed you different ways to use the sleep command in a Bash script.

And in the process I have covered a lot of different things:

  • Running scripts in the background.
  • Using the arithmetic operator.
  • Infinite while loops.
  • Counter variables.
  • Calling an API using curl.
  • Creating and removing files.
  • Setting executable permissions for Bash scripts.
  • Using the semicolon to run commands sequentially.

I hope it makes all sense!

And you? How else would you use the sleep command in Bash? 🙂

Related FREE Course: Decipher Bash Scripting

I’m a Software Engineer and Programming Coach. I want to help you in your journey to become a Super Developer!

Источник

Команда сна Linux (приостановка сценария Bash)

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

Команда sleep полезна при использовании в сценарии оболочки bash, например, при повторной попытке неудачной операции или внутри цикла.

В этом руководстве мы покажем вам, как использовать команду sleep в Linux.

Как использовать команду sleep

Синтаксис команды sleep следующий:

NUMBER может быть положительным целым числом или числом с плавающей запятой.

SUFFIX может быть одним из следующих:

Если суффикс не указан, по умолчанию используются секунды.

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

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

Примеры сценариев Bash

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

#!/bin/bash # start time date +"%H:%M:%S" # sleep for 5 seconds sleep 5 # end time date +"%H:%M:%S" 

Когда вы запустите сценарий, он напечатает текущее время в формате HH:MM:SS . Затем команда sleep приостанавливает скрипт на 5 секунд. По истечении указанного периода времени последняя строка сценария выводит текущее время.

Читайте также:  Linux alias to file

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

Давайте посмотрим на более сложный пример:

#!/bin/bash while : do if ping -c 1 ip_address &> /dev/null then echo "Host is online" break fi sleep 5 done 

Скрипт каждые 5 секунд проверяет, находится ли хост в сети или нет. Когда хост переходит в онлайн, скрипт уведомит вас и остановится.

  • В первой строке мы создаем бесконечный while цикл .
  • Затем мы используем команду ping чтобы определить, доступен ли хост с IP-адресом ip_address или нет.
  • Если хост доступен, сценарий выдаст эхо «Хост в сети» и завершит цикл.
  • Если хост недоступен, команда sleep приостанавливает скрипт на 5 секунд, а затем цикл начинается с начала.

Выводы

Команда sleep — одна из самых простых команд Linux. Он используется для приостановки выполнения следующей команды на заданное время.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Команда sleep в bash: делаем задержки в скриптах

При написании shell-скрипта может возникнуть необходимость создать в нем паузу в несколько секунд перед выполнением очередного шага. Например, чтобы скрипт «подождал», пока завершится какой-то процесс, или сделал паузу перед повторной попыткой выполнить неудавшуюся команду.

Для этого существует очень простая команда sleep .

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

Sleep — универсальная команда с простым синтаксисом. Все, что нужно сделать, это набрать sleep N . Это поставит ваш скрипт на паузу на N секунд. Секунды можно указывать в целых положительных числах или в числах с плавающей запятой.

Рассмотрим базовый пример:

echo "Hello there!" sleep 2 echo "Oops! I fell asleep for a couple seconds!"

Результат работы этого скрипта выглядит так:

Аналогично можно использовать число с плавающей запятой: это позволит указать доли секунды. Например, sleep .8 приостановит работу скрипта на 0,8 с.

Вот и все, что можно сказать о работе команды sleep на базовом уровне!

Что нужно иметь в виду, используя команду sleep

По умолчанию время для sleep указывается в секундах, поэтому в примере мы не указывали единицы измерения времени.

На некоторых типах машин (конкретно — BSD и MacOS) время вообще указывается исключительно в секундах. В других Unix-подобных операционных системах скорее всего будут поддерживаться и другие единицы времени:

С командой sleep также можно использовать больше одного аргумента. Если вы укажете два или больше чисел, задержка будет соответствовать их сумме.

Например, указав sleep 2m 30s , вы создадите паузу на 2,5 минуты. Имейте в виду, что в MacOS или BSD для такого результата нужно написать sleep 150 , поскольку в этих ОС время указывается только в секундах, а 2,5 мин = 150 с.

Итоги

Команда sleep — удобный способ добавить паузу в ваш bash-скрипт. В сочетании с другими командами sleep может помочь запускать операции в правильном порядке, делать паузы между попытками соединения с сайтами и т. п. В общем, этот инструмент точно стоит добавить в свой набор!

Источник

Оцените статью
Adblock
detector