ラズベリーパイで、コマンドを定期的に実行する方法です。
ここではsleepやcrontabを使ってやってみます。
毎日同じ時間に定期的にバックアップを取ったり、ディレクトリの不要なファイルを削除するといった処理を行うことができます。
sleep を使う
まずは、シンプルにsleepコマンド使って、コマンドを定期的に実行する方法です。
sleepというコマンドは、引数に数字をとり、その数字に対応する時間だけ単純に待つコマンドと考えてください。
例えば、
1 | $ ls; sleep 5; ls |
というコマンドを実行してみましょう。
これは、まずlsというコマンドを実行し、次にsleep 5というコマンドを実行し、最後にまたlsというコマンドを実行する、というコマンド列です。
;(セミコロン)で各コマンドを区切るることにより、上記のようにいくつかのコマンドを並べて順に自動的に実行することができます。
上記を実行すると、まずlsを実行し、5秒間待って、またlsを実行することがわかると思います。
sleep 5は、このように、5秒間待つコマンドになります。
スポンサーリンク数字5は、単位を付けなければ、defaultで秒の単位になります。
時間の単位は、次のものが用意されています。
- s: 秒 (デフォルト)
- m: 分
- h: 時間
- d: 日
数字は整数で指定します。
例えば、sleep 5m は5分、sleep 3hは3時間, sleep 1d は1日の間、このコマンドで待ちます。
sleep を使って、定期的にバックアップ
以下の記事:
で、バックアップをとるスクリプトを紹介しましたが、あるディレクトリを例えば1時間に1回バックアップする、といった処理を行いたいとき、このsleepコマンドを使用するのが1つの方法です。
1 2 3 4 5 6 7 | #!/bin/sh INTERVAL=1h while :;do ./backup.sh sleep $INTERVAL done |
これがサンプルのスクリプトです。
まず3行目、INTERVALという変数に、1hという文字列を格納しておきます。
4行目の while : は無限ループを行うシェルのコマンドです。do〜doneの間を無限にループします。止める時はCtrl-Cです。
5行目が、上記の記事で作ったbackup.shファイルの実行。
そして6行目がsleepコマンドです。INTERVALという変数には1hという文字列が入っているのでした。このsleeコマンドにより、ここで1時間待ちます。
あとはそれを無限に繰り返すので、1時間ごとにbackupが取れるというわけです。
1hの代わりに1dとすれば、1日ごとにbackupします。
もちろん、ラズベリーパイの電源を入れっぱなしにしておくことが前提です。
また、1時間ごととか、1日ごとというのは、実行を開始した時から数えますので注意してください。
crontabを使う
次はcrontabを使って同様のことを行なってみます。
crontabは、簡単にいうと、ラズベリーパイの時刻情報に合わせて、決まった処理を定期的に実行するコマンドです。
例えば、1時、2時、3時という決まった時刻に実行する、というイメージです。
指定の方法はsleepより少し複雑ですが、慣れれば簡単にできるようになります。
まず、混乱しないように事前準備として、.bashrcに以下の1行
1 | export EDITOR=leafpad |
を記述して、
1 | $ source ~/.bashrc |
を実行しておいてください。
leafpadは一例で、viでもemacsでもnanoでもかまいません。普段使っているエディタを指定してください。
次に
1 | $ crontab -e |
すると、指定したエディタでcrontabというファイルの編集画面が開きます。
先頭から20行ほど、#ではじまるコメント行がありますので、その下のところに、
1 | */1 * * * * date >> ~/date.log |
と書いてみましょう。
これは、「1分ごとにdate >> ~/date.logを実行する」という設定です。
5分ほど間って、ホームディレクトリに作成されているdate.logというファイルをlessで開いてみてください。
1 | $ less ~/date.log |
すると、1分毎に発行されたdateコマンドの結果がdate.logに追記されていると思います。
crontab を使って、定期的にバックアップ
crontabの記述方法について、ここでは詳細に説明しませんが、例えば「毎日深夜1時にホームディレクトリにあるbackup.shを実行する」という処理をするには、crontabに
1 | 0 1 * * * ~/backup.sh |
と記述します。
ディレクトリの関係の調整が必要なこともあるので、最初は1分に1回程度の短い時間で実行されるcrontabを書いて、テスト実行するのがよいと思います。
crontab の実行をやめるには、再びcrontab -eでこのファイルを開いて、追加した上記の行を削除してください。