SearchAPIを実行するRubyスクリプトをさくらインターネットのVPS上でcronで実行

はじめに

以前のエントリ

「図書館」が含まれるtweetを集めてみた By Ruby - 鴨川にあこがれる日々
を3ヶ月間,5日ごとに手動で実行していたのですが,さすがに手間でした.
そこでさくらのVPSサーバ上で自動収集するようにしました.
設定のためにcrontabを記述したので,その内容を簡単に大雑把に(自分のために)まとめました.

そもそもcronってなんだというのはこちらを参照していただけると幸いです.

cronとは 【 crond 】 【 crontab 】 - 意味/解説/説明/定義 : IT用語辞典

決まった時間に実行したい処理と時間,などをcrontabファイルに記述します.

本題

まずcronが起動しているかどうかを確認します

% /etc/rc.d/init.d/crond status
crond (pid  1176) を実行中...

これは起動している状態です.

止まってたら

% /etc/rc.d/init.d/crond start

とすれば起動します.

自身で作成したユーザで実行したいので,
今回はgammaというユーザでやっているという仮定のもと設定します.

% crontab -e

で(おそらくvi)テキストエディタが起動します.
ここに設定や処理をしたい内容を記述します.
今回はsigma.sh(この中にrubyを実行するコマンドを記述)というファイルの/home/gamma/workdir/下にあるファイルをcronで20分毎に処理させます.
TwitterのsearchAPIが15分単位なので,ここでは20です.

#PATHの読み込み
PATH=/home/gamma/.anyenv/envs/rbenv/bin:/home/gamma/.anyenv/bin:/home/gamma/.anyenv/envs/rbenv/bin:/home/gamma/.anyenv/bin:/home/gamma/.anyenv/envs/rbenv/bin:/home/gamma/.anyenv/envs/rbenv/shims:/home/gamma/.anyenv/bin:/usr/local/bin:/bin:/usr/bin:/home/gamma/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/gamma/bin:/home/gamma/bin:/home/gamma/bin

# 実行する内容(20分ごとにzshで/home/gammma/workdirのsigma.shを実行)
*/20  *  *  *  *   /bin/zsh -lc 'cd /home/gamma/workdir/ && sh sigma.sh'

(もしかすると必要でない設定があるかもしれませんが,ご了承ください)

気をつけることとしては

  • この処理を実行するユーザは,crontab -eしたユーザであること(この場合はgamma)
  • sigma.shの実行許可がでていること(なければchmodしましょう)
  • パスを通すこと(cronはいつもの使っている設定のshellで実行しない)

です.

パスを通す部分で少し苦戦しましたが,zshrcパスをそのまま書きました.
1番下に行が実行する処理ですが,具体的な書き方は既存のものを参照していただいたほうがわかりやすいかとおもいます.
crontabの書き方 — server-memo.net
複数行かくこともできます.

crontabに記述した処理がエラーであれば,

$ mail

とコマンドを入力すると,通知メールを確認できます.

テストの段階では,1分刻みでcrontabに処理をかいて,エラーがなくなったら,実際に動かす,という流れで私は作業しています.

終わりに

これで1時間ごとに動くことになります.
繰り返す処理は自動化して人はもっとらくしましょう.