The sleep command

I showed the sleep command earlier, let's look at that in much more detail. In general, the sleep command is used to introduce a delay in the script. For example, in the previous script if I had not used sleep the output would have scrolled off too quickly to see what was going on.

The sleep command takes a parameter indicating how long to make the delay. For example, sleep 1 means to introduce a delay of one second. Here are a few examples:

sleep 1       # sleep 1 second (the default is seconds)
sleep 1s      # sleep 1 second
sleep 1m      # sleep 1 minute
sleep 1h      # sleep 1 hour
sleep 1d      # sleep 1 day

The sleep command actually has a bit more capability that what is shown here. For more information, please consult the man page (man sleep).

Here's a script showing in more detail how sleep works:

Chapter 3 - Script 10

#!/bin/sh
#
# 5/3/2017
#
echo "script10 - Linux Scripting Book"

echo "Sleeping seconds..."
x=1
while [ $x -le 5 ]
do
 date
 let x++
 sleep 1
done

echo "Sleeping minutes..."
x=1
while [ $x -le 2 ]
do
 date
 let x++
 sleep 1m
done

echo "Sleeping hours..."
x=1
while [ $x -le 2 ]
do
 date
 let x++
 sleep 1h
done

echo "End of script10"
exit 0

And the output:

Chapter 3 - Script 10

You may have noticed that I pressed Ctrl + C to terminate the script since I didn't want to wait 2 hours for it to finish. Scripts of this nature are used very extensively in a Linux system to monitor processes, watch for files, and so on.

There is a common pitfall when using the sleep command that needs to be mentioned.

Note

Remember that the sleep command introduces a delay into the script. To be clear, when you code a sleep 60 it means to introduce a delay of 60 seconds; it does not mean it is going to run the script every 60 seconds. There is a big difference.

We'll see an example of this in the following section:

Chapter 3 - Script 11

#!/bin/sh
#
# 5/3/2017
#
echo "script11 - Linux Scripting Book"

while [ true ]
do
 date
 sleep 60                    # 60 seconds
done

echo "End of script11"

exit 0

This is the output on my system. It doesn't take all that long to eventually get out of sync:

Chapter 3 - Script 11

For the vast majority of scripts this is never going to be a problem. Just remember if what you are trying to accomplish is time critical, like trying to run a command at exactly 12:00 am every night, you might want to look at some other approach. Note that crontab will also not do this as there is about a 1 or 2 second delay before it runs the command.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset