(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【入門】sleepコマンドとcron機構の違い

スポンサーリンク

はじめに

sleepコマンドとは処理を中断することで待ち時間を発生させる手法で任意の秒数で指定できるので、場合によってはcronに登録するよりも手軽に利用できます。

本記事では、例えばコマンドを60秒毎に実行する場合におけるsleepとcronの違いについて分かりやすく説明します。

sleepコマンド

sleepコマンドはカレンダーとは切り離されて実行されます。
要は、指定された秒数を待機した後に実行されます。

例えば以下の記事にある通り

$ while :; do date ; sleep 60; done

とターミナルで実現すれば「Ctrl+C」で中止を行うまで一分毎にコマンドが実行されます。

一方で例えば dateコマンドではなく 別の時間がかかるコマンドを使用した場合、そちらの実行にかかった時間が無視できなくなるケースがあります。

要は、一連の処理が60秒ではなく61秒になってしまいます。

cron機構

以下にてcrontabを開いて

$ crontab -e

以下のように記載すれば毎分コマンドが実行されます。

* * * * * date >> /home/xxx/date.txt

こちらはカレンダーに従って実行されるので、コマンド発行に数秒かかってしまったとしても分が切り替われば実行されます。

ちなみにtimeコマンドを利用すればそのコマンドにどれくらい時間がかかったか確認できます。
以下のdateコマンドに対して

$ time date
xxxx

real    0m0.001s
user    0m0.000s
sys     0m0.004s

例えばwgetでHTMLを取得するともなると

time wget <url>
....

real    0m1.645s
user    0m0.016s
sys     0m0.004s

一秒以上かかってしまいます。

前者の場合はsleepコマンドとcronで大きな差はありませんが、後者の場合は実行間隔に差がでてきます。

終わりに

定期的な処理はcronにて管理し、sleepコマンドはスクリプトの中で明示的に待ち時間を発生させたい場合に利用するのが良いと思います。

以上、UNIXの世界におけるsleepコマンドとcronの使い分けでした。ご参考になれば幸いです。