wata.dev

さくらのレンタルサーバーで cron から perlbrew な perl を使う

決まった作業を自動化するスクリプトを perl で書いて cron にセットして快適!とか、ようやく最近になって実感してたんですが、自宅で動かすのにいろいろ限界を感じはじめたので、自宅の Mac で動かしていたスクリプトをさくらのスタンダードプランで設置してみたメモ。

perlbrew と cpanm は、ターミナルからさくらのレンタルサーバーに ssh 接続して入れといてください。入れ方は[まとめ] さくらのVPSで一気に perl の環境を整えるとか見てみてください。

$ perlbrew list
* perl-5.12.3
  /usr/bin/perl (5.8.9)
  /usr/local/bin/perl (5.8.9)

$ which cpanm
/home/ユーザ/perl5/perlbrew/perls/current/bin/cpanm

今回 cron にセットするスクリプトは、Email::Send::SMTP::Gmail を使って、自分の Gmail にメールするという簡単なもの。足りないモジュールはシェルから cpanm で入れてください。

send_gmail.pl

#!usr/bin/perl
use strict;
use warnings;
use autodie;
use Config::Pit;
use Email::Send::SMTP::Gmail;

my $google_conf = pit_get('google.com');

my $mail = Email::Send::SMTP::Gmail->new(
    -smtp  => 'gmail.com',
    -login => $google_conf->{username},
    -pass  => $google_conf->{password}
);
$mail->send(
    -to          => 'example@gmail.com',
    -subject     => 'Test Report',
    -verbose     => '1',
    -body        => 'Just testing it',
#    -attachments => $file
# ↑添付ファイルがあるとき
);
$mail->bye;

これを ~/www 以下、今回は ~/www/cron に置きました。

ここからはさくらのコントロールパネルでの操作。まずは[CRONの設定]画面から以下の実行コマンドを入力してみます。実行日時は試しなので1分後の時刻とかで。

さくらインターネットサーバコントロールパネル

するとデフォルトで標準出力が postmaster へメールで届きます。さくらのメール受信箱を見てみてください。これが毎回来るのが嫌だという人は実行コマンドに 1> /dev/null を付け足すと送られないみたい。「Cron Daemon」からこんな結果が送られてきてるはず。

Summary of my perl5 (revision 5 version 8 subversion 9) configuration:

...

@INC: 
    /usr/local/lib/perl5/5.8.9/BSDPAN 
    /usr/local/lib/perl5/site_perl/5.8.9/mach 
    /usr/local/lib/perl5/site_perl/5.8.9 
    /usr/local/lib/perl5/5.8.9/mach 
    /usr/local/lib/perl5/5.8.9 
    .

今回は perlbrew で入れた perl を使いたいので以下のように変更。perlbrew な perl を使うように環境変数を追加してます。

さくらインターネットサーバコントロールパネル(1)

するとこんな結果に。

Summary of my perl5 (revision 5 version 12 subversion 3) configuration:

...

@INC: 
    /home/ユーザ/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/i386-freebsd 
    /home/ユーザ/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3 
    /home/ユーザ/perl5/perlbrew/perls/perl-5.12.3/lib/5.12.3/i386-freebsd 
    /home/ユーザ/perl5/perlbrew/perls/perl-5.12.3/lib/5.12.3 
    .

perl のバージョンが perlbrew で入れた perl-5.12.3 に変わってる!@INC も perl-5.12.3 のライブラリを指しているので、perl-5.12.3 の cpanm を使って入れたモジュールも使えそうですね。

では最後に send_gmail.pl を実行してみます。

さくらインターネットサーバコントロールパネル(2)

こんな結果が受信箱に届いてるはず。

Attachments successfully verified 
With No attachments 
Sending email 
Mail sent!

Gmail の方にもちゃんとメールが届いてると思います。良かった良かった。これを使って例えば Google Analytics の日次データを API から取得して内容をメールする、みたいなスクリプトを perl で書いて、毎朝7時に実行するように cron にセットしとけば便利そうです。

というわけで今のところ快適!

▼参考

ブログの記事一覧