2013年2月8日 星期五

PERL 執行cron job (crontab)

http://jck11.pixnet.net/blog/post/4902321-利用lwp%3A%3Auseragent與網頁互動%5Bperl%5D
利用LWP::UserAgent與網頁互動[perl]
用perl去抓twitter的api把其中的資料存到主機上的檔案

#!/usr/bin/perl

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;
use LWP::UserAgent;
use HTTP::Headers;
use JSON;

our %SITE = (
    'aaa' => 'https://api.twitter.com/1/users/show.json?screen_name=aaa_account&include_entities=true',
    'bbb'    => 'https://api.twitter.com/1/users/show.json?screen_name=bbb_account&include_entities=true',
);


&get_twitter_api(\%SITE);

sub get_twitter_api {
    my $site = shift;

    my $url;
    my $class;
    my $agent_name='myagent';
    my $ua=LWP::UserAgent->new($agent_name);

    foreach my $k (keys %$site) {
        $url = $site->{$k};
        $class = $k;

        my $request=HTTP::Request->new(GET=>$url);

        $request->header(Accept=>'text/html');

        my $response=$ua->request($request);

        my $decoded;

        my $content = $response->{_content};

        $decoded = &JSON::decode_json($content);

        my $path = '>/XXX/files/'.$class.'/cron/twitter_followers_count.txt';

        open (MYFILE, $path) || die "Can't open file $path : $!\n";;

        print MYFILE $decoded->{followers_count};

        close (MYFILE);

    }

}
.
http://stackoverflow.com/questions/8655487/how-to-convert-string-to-json-in-perl
How to convert string to json in perl
用UA抓回來的資料是字串
要把他轉為json
上文範例中的 use Try::Tiny; 是需要安裝的perl套件
安裝方法: $cpan Try::Tiny

http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/
15 Awesome Cron Job Examples
跑cron job
1. 查crontab有沒有在跑
$ service crond status
crond (pid  13616) is running...
$ crontab -e 進入編輯
寫入
00 * * * * /usr/bin/perl /home/xxx/cronjob/twitter_followers_count.pl
分 時 日 月 星期
(可先用 * * * * * 每分鐘跑 去看他有沒有跑 或者網路上有用到秒數的方法sleep)
ls -l 看那個檔案最後更新的時間

測試
$ ./your_cron_job.pl

對reference跑迴圈:
http://stackoverflow.com/questions/5249362/how-to-use-foreach-on-hash-a-reference
foreach my $key (keys %{ $ad_grp_ref }) {
    ...
}

Crontab "*/1" 是什麼意思?
http://www.unix.com/linux/136805-crontab-1-a.html
*/1 * * * * /usr/local/bin/jdumpscan.sh
/1是多餘的,等同於每分鐘。等於
* * * * * /usr/local/bin/jdumpscan.sh

設定crontab -e 預設編輯器
http://superuser.com/questions/281617/change-default-text-editor-for-crontab-to-vim
如果預設編輯器不是vim,則使用下面指令設定
export VISUAL=vim

export EDITOR=vim

每30秒跑一次cronjob
http://stackoverflow.com/questions/9619362/running-a-cron-every-30-seconds
crontab -e:
* * * * * /usr/bin/bash /home/ds/test.sh
* * * * * ( sleep 30 ; /usr/bin/bash /home/ds/test.sh)




沒有留言:

張貼留言