2014年5月6日火曜日

Raspberry Pi:cronの設定

Raspberry Piは電源もたいしてくわなくて、ファンがなくても動作OKです。更にHDDがなくてもLinuxが動作するということで、1日中電源Onにしておくサーバーにするのにもってこいです。ただ外部記憶がmicroSDだけで(自分は32GBを使っています)、ファイルサーバーには使えませんし、CPUも大した性能がなく、Ethernetの口も基本一つしかつていませんから、Firewallにするわけにもいきません。
まあ何に使うかはともかく、電源入れっぱなしのマシンにして何がしかのサービスをさせようと思うと、定期的にプログラムを起動するための設定、crontabをちょっと調べてみました。

自分がcrontabのこと調べてた時は、/etc/crontabに定期的に動かしたコマンドを登録して、crondデーモンを再起動したもんですが、今はだいぶ変わりましたね。(便利になった)

  1. crontabの登録
  2. これは簡単で、以下のコマンドでOKです。
    $ crontab -e
    /etc/crontabはroot権限がないと編集できませんが、今はユーザー毎にcrontabが存在しており、それを自由に登録・削除できます。/etc/crontabはシステムに一つしかないファイルですので、ここにコマンドを登録するときは、当該コマンドを実行するユーザーも設定しないといけませんが、今は個々のユーザーがcrontabを持てるので、、上記コマンドで設定するときはユーザーの設定はいちいち必要ありません。(当然、設定しているユーザー権限で動作しますから)
    尚、editorはデフォルトで"nano"が動きますが、はっきり言ってこれは使いにくい!せめてviかemacsでやりたいところです。crontabの説明を調べると、起動時にどれを使うか問い合わせてくれるとか、後で変更できるとありますが、Raspberry Piではできないようです。従って汎用的な方法として.bashrcに以下の設定を追加します。
    EDITOR=emacs
    export EDITOR

  3. crontabの確認
  4. 以下のコマンドで自分用のcrontabの登録状況を確認できます。
    $ crontab -l

  5. crontabの場所
  6. さて肝心の個々のユーザーのcrontabがどこにあるかですが、以下の場所です。
    /var/spool/cron/crontabs/(ユーザー名)
    というファイル名で保存されています。crond自身は1分程度毎にこのファイルの変更状況を確認しているようで、特にcrondを再起動しなくても変更は反映されます。(そもそもcrontabは分単位でしかプログラム動作を設定できないので、これで十分です)
注意として、実行したいコマンド(特に自分で作成したプログラム)、ファイル等を指定するとき、なるべくフルパスで行った方が安全です。cronで当該コマンドが実行される時の環境(動いている時のカレントパスがどこなのか等)がよくわからないので、できるだけ依存性がないようにしておくべきです。

追記:
なぜcrontabの設定なんか調べていたかというと、Raspberry Piをネットラジオの録音サーバー(特定の番組を予約録音して、結果をmp3ファイルにする)にしたてようと目論んでいるんです。crontabで留守録音の登録をしてみて、うまくいきました。某サイトに録音スクリプトが公開されていたので(注:著作権的にグレーな気がしますので、詳しい場所は伏せておきます。探せばすぐに見つかります。)、それを使いましたが、以下のパッケージが必要で、apt-get installですべてインストールしました。
swftools
rtmpdump
libxml
wget
ffmpeg
lame
ちょっと困ったのが、1時間ほどの録音をした後、mp3変換にffmpegが動いているのですが、これが40分くらいかかってしまいました。サイズも56MBと結構なサイズになりました。とりあえず原理的には動くことがわかったので、ブラウザで録音設定ができるようなフロントエンドや、録音データを簡単にタブレットに転送できるような方法を考えないと。

0 件のコメント:

コメントを投稿