実用裏方 Perl 入門標準モジュールで作るUNIXコマンドとバッチ処理keroyonn / Hokkaido.pmHokkaido.pm #4
自己紹介ちょっとずつ違う素敵なID達cpan	: keroyonhttp://search.cpan.org/~keroyon/github	: keroyonnhttp://github.com/keroyonntwitter	: keroyonn_http://twitter.com/keroyonn_hatena	:keroyon0630http://d.hatena.ne.jp/keroyon0630Hokkaido.pm #4
今回のお題面倒な作業を、コマンドを作って、バッチ処理にしようオンラインシステムの裏で地味な運用業務があります。いらないファイルを消したり、アクセスログ集計したり、システムのバージョンアップしたり、対向システムからFTP投稿されたデータをシステムに投入したり。手作業でもできるけど面倒臭すぎる、そんな業務の数々を標準モジュールのみで作れると楽。萌えやポロリはありません!!Hokkaido.pm #4
基礎知識編Hokkaido.pm #4用語とかを押えておこう
バッチ処理で出てくる用語ジョブ小さな仕事の単位(1コマンドに対応)ジョブネット複数のジョブをまとめて制御して実行する単位ジョブ(ジョブネット)管理定期実行ログ出力メール通知ジョブネット作成Hokkaido.pm #4
ジョブ管理システムジョブ管理ができるものcron… 最も単純で枯れているジョブネット管理ができるものJP1… 商用hinemos…NTTデータオープンソース他にもありますかね?Hokkaido.pm #4
バッチ処理の種類 (1/3)削除系ログローテート/キャッシュ削除/セッション削除/その他不要ファイル削除/DBの古いデータ削除 などなど転送系プログラムの配備/リリースバッチコンテンツ同期バックアップHokkaido.pm #4
バッチ処理の種類 (2/3)交換系データ到着を監視して、ネット越しに情報を取得、フォーマットやエラーをチェックしてデータ形式を変換後、自システムに投入したり。変更系指定日になったら、とか特定の条件でステータスを変更するなど(来月の1日なったらコンテンツを公開するとか)Hokkaido.pm #4
バッチ処理の種類 (3/3)集計系アクセスログ解析 (webalizer)自分が作ったことあるのはこれくらいですが、他にもありますかね?Hokkaido.pm #4
注意点大量データを処理することがある長時間稼動するメモリリーク想定時間内に終了しない負荷が高くなるメモリ、CPU使用量、IO負荷あと何かありますかね?Hokkaido.pm #4
実践編Hokkaido.pm #4削除バッチを作ってみよう
要件毎週日曜日、特定のフォルダ以下のファイルを削除する ( cron + find でOK)ファイル名の拡張子は、*.bak (cron + find でOK)ただし、消していいのは過去3時間以内に更新されていないファイルのみ (なんか find じゃだめっぽい)削除できたファイルを標準出力に、できなかったファイルを標準エラーに出力 (シェルスクリプトかな?)UNIXコマンドライクにオプション指定ができ、ヘルプも出てくる (なんかどんどん面倒になってきた)色々要件が膨らみそうな予感。(汎用的な言語で書いといた方がいいかな?)Hokkaido.pm #4
モジュールを探すcorelistを使うと標準モジュールを検索することができるfind してくれるモジュールは?corelist –v 5.8.8 | egrep –i ‘file|find’オプション処理してくれるモジュールは?corelist –v 5.8.8 | egrep –i ‘opt’Hokkaido.pm #4
ソースコード (1/3)端折り過ぎなのでそのまま使うと危険!!#!/usr/bin/perluse warnings;use strict;use utf8;use Getopt::Long;use Pod::Usage;use File::Find;use File::stat;BEGIN { binmode STDOUT, ':utf8‘; }# コマンドオプションの解析my $modified_time = 6;GetOptions( 'mtime=i' => \$modified_time, ) or pod2usage(2);my $base_dir = shift @ARGV;if ( !defined $base_dir ) {    print "削除対象のディレクトリ名を指定してください。\n";    pod2usage(2);}# 全bakファイルを取得して削除find( \&delete_files, $base_dir );Hokkaido.pm #4
ソースコード (2/3)sub delete_files {    my $fullpath = $File::Find::name;    my $filename = $_;    # bak以外ならスキップreturn if $filename !~ m{\.bak$}xms;    # n 時間以内に更新されたファイルを除外my $stat  = stat($fullpath);    my $mtime = $stat->mtime;    return if $mtime + $modified_time * 3600 > time;    # 削除my $ret = unlink $fullpath;    if ( $ret < 1 ) {        print STDERR "$fullpathを削除できませんでした。\n";        return;    }    print "$fullpathを削除しました。\n";}Hokkaido.pm #4
ソースコード (3/3)__END__=encoding utf-8=head1 NAMEdelete_backup_files - 過去n時間以内に更新されなかったバックアップファイルを除外する=head1 SYNOPSISdelete_backup_files [options] directory_name  Options:    --mtime=n 過去n時間以内に更新されなかったバックアップファイルを除外する。デフォルト 6 時間Hokkaido.pm #4
テストtouch コマンドで、ファイルのアクセス時刻と修正時刻を変更できるtouch –t MMDDhhmmファイル名例. hoge.txt の修正時刻を今年の2/10 10:30に変更touch –t 02101030 hoge.txtHokkaido.pm #4
ジョブを登録するcrontab –e分 時 日 月 曜日** * *   *コマンドのフルパス30  3  *  *  0 /home/hogehoge/delete_backup_files例. 毎月1日の3時30分にコマンドを実行3031  *  * コマンド毎週日曜日に毎分コマンドを実行* * * * 0 コマンドとにかく毎分実行する* * * * * コマンドHokkaido.pm #4
まとめPerl は Linux に標準インストールなので、標準モジュールだけ使って作ればシェルスクリプトと同じ感覚で配布できる。なのでコマンドは、Perl で作った方が楽-> corelist (Module::CoreList)メモリリークなどに気をつける必要がある-> Devel::Leak::Object性能の要件を満す必要がある-> Devel::NYTProfHokkaido.pm #4
ご清聴ありがとうございましたHokkaido.pm #4

More Related Content

KEY
Mojoliciousをウェブ制作現場で使ってみてる
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
KEY
Perlで伝統芸能
PDF
Using Dancer
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
FuelPHPで3種のprofilerを使ってみた
KEY
あらためてPHP5.3
PDF
WebAPIではじめるphp入門
Mojoliciousをウェブ制作現場で使ってみてる
omoon.org の裏側 〜FuelPHP の task 活用例〜
Perlで伝統芸能
Using Dancer
15分でCakePHPを始める方法(Nseg 2013-11-09 )
FuelPHPで3種のprofilerを使ってみた
あらためてPHP5.3
WebAPIではじめるphp入門

What's hot (19)

PDF
Rails初心者レッスン lesson5 2edition
PDF
PDF
zsh とわたし
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
PDF
メタメタプログラミングRuby
PDF
オンプレでPrivate Registry使ったDockerイメージの運用について
PPTX
PHP7を魔改造した話
PPT
Lightweight Language Tiger 2010
PPT
CodeIgniterのページングに関して。
PDF
Yapc -asia 2012 lt @studio3104
PDF
Haikara
PDF
知って得する標準関数の使い方
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PPTX
serverspecを使用したサーバ設定テストの実例
KEY
PDF
2日間Fabricを触った俺が
 色々解説してみる
PDF
WordPressと外部APIとの連携
PDF
CakeRequest::onlyAllow() について
PDF
Rails初心者レッスン lesson5 2edition
zsh とわたし
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
メタメタプログラミングRuby
オンプレでPrivate Registry使ったDockerイメージの運用について
PHP7を魔改造した話
Lightweight Language Tiger 2010
CodeIgniterのページングに関して。
Yapc -asia 2012 lt @studio3104
Haikara
知って得する標準関数の使い方
awk v.s. bashどっちが強い?@OSC2011Tokyo
serverspecを使用したサーバ設定テストの実例
2日間Fabricを触った俺が
 色々解説してみる
WordPressと外部APIとの連携
CakeRequest::onlyAllow() について
Ad

Viewers also liked (20)

PPT
マインドハック研究会 ライフハック編 20100512
PPT
社内Gtd勉強会 20101022
PDF
バージョン管理入門
PPTX
IGDA_Sig-BoardGame_ワークショップ用資料
PDF
Software Foundation:形式的証明と非形式的証明
 
PDF
PPT
関西ライフハック研究会×アイデアプラント
PDF
GTD 残業を減らす方法
PDF
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」
KEY
KEY
PPTX
TO LOVE IN'~人生のパートナーを見つける旅~
ODP
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン
PPT
ユーザ目線の実践的BPM
PDF
ふり返りハック ~ ライフをハッキングするために
PPTX
20161026_超高層大気観測データのメタデータ作成実験経過報告
PDF
ライフハック研究会Lt大会20120519
PDF
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
PPT
DXライブラリのすゝめ
PDF
NetBSDとは
マインドハック研究会 ライフハック編 20100512
社内Gtd勉強会 20101022
バージョン管理入門
IGDA_Sig-BoardGame_ワークショップ用資料
Software Foundation:形式的証明と非形式的証明
 
関西ライフハック研究会×アイデアプラント
GTD 残業を減らす方法
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」
TO LOVE IN'~人生のパートナーを見つける旅~
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン
ユーザ目線の実践的BPM
ふり返りハック ~ ライフをハッキングするために
20161026_超高層大気観測データのメタデータ作成実験経過報告
ライフハック研究会Lt大会20120519
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
DXライブラリのすゝめ
NetBSDとは
Ad

Similar to 実用裏方 Perl 入門 (20)

PDF
初めてのPerl
PDF
お手軽並列処理
PPTX
Powershell勉強会 v5 (こちらが最新です。)
PPTX
Powershell基礎_20180521用
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PPTX
Powershell勉強会 v3 (もっと新しいバージョンがあります)
PPTX
Powershell勉強会 v2 (もっと新しいバージョンがあります)
PPTX
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
PDF
WDD2012_SC-004
PPTX
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
PDF
ホームディレクトリに埋もれた便利なコードをさがせ!
PPTX
Windowsでも使えるシェル
PPT
CPANの依存モジュールをもう少し正しく検出したい
PDF
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
PPTX
USP 友の会 LT 資料 20130413
PDF
誰得コマンド&オプション35連発
KEY
20年越しで Perl 4 to 5 した話
PDF
2017-12-04 Linuxの基本構造とBashでの扱い方
PDF
Kyotopm発表資料20130330
PDF
シェル芸初心者によるシェル芸入門 (修正版)
初めてのPerl
お手軽並列処理
Powershell勉強会 v5 (こちらが最新です。)
Powershell基礎_20180521用
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
WDD2012_SC-004
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
ホームディレクトリに埋もれた便利なコードをさがせ!
Windowsでも使えるシェル
CPANの依存モジュールをもう少し正しく検出したい
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
USP 友の会 LT 資料 20130413
誰得コマンド&オプション35連発
20年越しで Perl 4 to 5 した話
2017-12-04 Linuxの基本構造とBashでの扱い方
Kyotopm発表資料20130330
シェル芸初心者によるシェル芸入門 (修正版)

More from keroyonn (6)

PDF
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
PPTX
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
PPTX
Perlで次世代ゲーム開発
PPTX
Perl/CGI 入門
PPTX
非同期処理の通知処理 with Tatsumaki
PPTX
Perl logging
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perlで次世代ゲーム開発
Perl/CGI 入門
非同期処理の通知処理 with Tatsumaki
Perl logging

実用裏方 Perl 入門