読者です 読者をやめる 読者になる 読者になる

Portal:siro

ダイレクトマーケティングブログ

ちぃサイラスBOT制作:1時間に1回喋るようにする(cron)

前回:
ちぃサイラスBOT制作:発言リストを作り、その中からランダムで喋る - Portal:siro
http://d.hatena.ne.jp/siro_xx/20110515/1305437758

今回はソースは書きません。BOTに自動でTweetさせるための手法の話。

cron

crontab(クロンタブ、あるいはクローンタブ、クーロンタブとも)コマンドはUnix系OSにおいて、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。標準入力からコマンド列を読み取り、crontabと呼ばれるファイルにそれを記録する。この記録を元に定時になると、その命令内容を読み取り、実行が行われる。cronという名称はギリシア語のクロノス (χρόνος)に由来するという説がある(Command Run ON の略という説も)。日本ではクーロンという読みが慣習的に広く用いられているが、海外では通常クロンまたはクローンと発音する[1]。
一般にcrontabコマンドで編集されたスケジュール内容は、crondデーモンにより実行される。crondはバックグラウンドで稼動し、毎分ごとに実行すべきスケジュールがないか確認し、もし実行すべきジョブがあれば、それを実行する。このジョブは「cron job」とも呼ばれる。

crontab - Wikipedia

わかるか!って声が聞こえそうですが、はい。ぶっちゃけ僕もよくわかりません。
情報学部出ておいてcronの設定もできないなんてってなんか激しくdisられそうな未来しか見えないんですが、GUI環境に慣れきったゆるふわゆとりWindowsユーザがUnixコマンドわかるわけないじゃないですか!!!11!cdとsudoとlsとslしかわからないですよ!!!!1!



閑話休題

要するに、スケジュールを組んで特定の時間にプログラムを動かすものだと覚えておけばよろしいと思います。

cronを使ったBOTの自動実行(さくらの場合)

ぶっちゃけた話、無料鯖phpもcronも使えるってところってないと思うの。あったらゴメンだけど。正直無いと思う。
だからここでは有料鯖というかさくら前提で書きます。
さくらのcronは僕みたいなゆとりでも扱えるようにGUI環境が整っているので、らくちんです。

分かる人は、さくら非公式FAQ( http://faq.sakuratan.com/wiki/wiki.cgi?cgi%a4%c8php#i29 )見れば早いのでそちらを見ましょう。僕はこの説明で理解できなかったゆとりなのでもうちょっとなんとかします。

とりあえずさくらのコントロールパネルを開きます


左側のメニューからcronの設定を開きます。

なんかこんな感じの画面が出てきます。しろぼっともここで動いてます。


うっかりこのSSでは上限数の5に達してしまっているので無いのですが、普通なら右のほうに「新規項目の追加」というのがありますのでそこをクリックします。


こんな感じの画面になりますので、

埋めます。

そこを説明しろって話ですよねわかります。

先に簡単なほうから説明していいですか。

  • コメント

日本語で色々書いておけるので何のためのcron設定なのか書いておきます。

  • 実行日時

右側に懇切丁寧に解説がある通りです。
毎時0分に動かすならば、このスクショの通りに埋めればよいです。
割と忘れがちなのですが、曜日のチェック入れないと動きませんので忘れないように。

  • 実行コマンド

(コマンドラインとかの知識があれば恐らく理解できると思いますが、できなくてもまあなんとなくそういうものなんだと思っていただければ)
ここに、「このフォルダ内にあるちぃサイラスBOT.phpを実行する」とサーバが理解できる言葉で書きます。
実際には以下のように書いてあります。

cd /home/hoge/www/phpファイルが置いてあるディレクトリまでのパス/ ; /usr/local/bin/php phpファイルの名前.php 1> /dev/null

cdというのはディレクトリ(フォルダ)移動です。Windowsコマンドラインにもcdはあったと思います。
ここで、/home/からのURLでBOTphpが置いてあるディレクトリを指定します。
hogeの部分にはユーザ名(aaa.sakura.ne.jpのaaaの部分)が入ります。


;は区切りです。とりあえず入れておきましょう。

次の
/usr/local/bin/phpというのはおまじないです。とりあえず書いてください。
/usr(略)/phpPHPファイルを実行しますよってことです。
phpファイルの名前はそのまま書けばよいです。

そこからスペースを1つ空けて、「1> /dev/null」とありますが、これもおまじないです。書いてください。
書かなくても実害は無いといえば無いですが、メールサーバがパンクします。多分。

これはどういう意味なのかと言いますと、「コマンドの標準出力を postmaster へ送りたくない場合、コマンドの後に1> /dev/null を加えてください」とさくらさんが懇切丁寧に書いてくれているとおり、
通常は、cronで実行した実行結果*1は自分のメールアドレス(postmaster)に自動送信されます。
数日おきのバックアップとか、そういう類のスケジュールですとそういう記録を残す必要性もありますが、基本的にBOTの動作でいちいちそんなの残していても見ません。
なので、おまじないを書いてそのメールが送られないようにしています。



あとは送信を押せば無事登録です。時間になったらBOTが動作しているかを確認しましょう。

cronが使えないサーバの場合

色々とやり方はあります。
一時期僕はしろぼっとを動かすためのphpアドレスをiGoogleに埋め込んで、iGoogleを表示させるたびにBOTが喋るようにしていました。
一番簡単なやり方はブラウザのスタートページにBOTphpを登録することです。こうするとブラウザを起動するたびにphpにアクセスしてBOTが喋ります。


でも決まった時間に喋らせたいということであれば、web上のcronサービスを使うのがいいかと思います。

実は数年前まではその名もWebCronというそのまんまなサービスがあったのですが、残念ながら有料化されてしまいました。
まあ1時間に1回程度であれば1年使ってもたかだか数百円らしいのでお金払ってもいいよって人はWebCronでいいんじゃないかなって思います。

「web cron 無料」などのキーワードで検索すれば多分いくつかでてきます。(ほぼ間違いなく海外サイトなので、最低限の外国語読解力は要ると思います)
ある程度大手のところならば日本語解説とか日本語UI対応とかしてるので問題ないといえばないですが……。


そんな感じで指定してやれば、BOTが一定時間で喋るようになります。ぴぃぴぃ!

*1:Echo吐いてないのでただのログみたいなものですが