SlideShare ist ein Scribd-Unternehmen logo
1 von 20
実用裏方 Perl 入門 標準モジュールで作るUNIXコマンドとバッチ処理 keroyonn / Hokkaido.pm Hokkaido.pm #4
自己紹介 ちょっとずつ違う素敵なID達 cpan	: keroyonhttp://search.cpan.org/~keroyon/ github	: keroyonnhttp://github.com/keroyonn twitter	: keroyonn_http://twitter.com/keroyonn_ hatena	:keroyon0630http://d.hatena.ne.jp/keroyon0630 Hokkaido.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/perl use 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 "削除対象のディレクトリ名を指定してください。";     pod2usage(2); } # 全bakファイルを取得して削除 find( amp;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を削除できませんでした。";         return;     }     print "$fullpathを削除しました。"; } Hokkaido.pm #4
ソースコード (3/3) __END__ =encoding utf-8 =head1 NAME delete_backup_files - 過去n時間以内に更新されなかったバックアップファイルを除外する =head1 SYNOPSIS delete_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.txt Hokkaido.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::NYTProf Hokkaido.pm #4
ご清聴ありがとうございました Hokkaido.pm #4

Weitere ähnliche Inhalte

Was ist angesagt?

Rails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2editionRails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2edition
Satomi Tsujita
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
biscuitjam
 
CodeIgniterのページングに関して。
CodeIgniterのページングに関して。CodeIgniterのページングに関して。
CodeIgniterのページングに関して。
Takatsugu Ishikawa
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
airtoxin Ishii
 

Was ist angesagt? (20)

PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
 
Rails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2editionRails初心者レッスン lesson5 2edition
Rails初心者レッスン lesson5 2edition
 
test
testtest
test
 
zsh とわたし
zsh とわたし zsh とわたし
zsh とわたし
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
オンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用についてオンプレでPrivate Registry使ったDockerイメージの運用について
オンプレでPrivate Registry使ったDockerイメージの運用について
 
PHP7を魔改造した話
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
 
CodeIgniterのページングに関して。
CodeIgniterのページングに関して。CodeIgniterのページングに関して。
CodeIgniterのページングに関して。
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
 
Haikara
HaikaraHaikara
Haikara
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 
01 php7
01   php701   php7
01 php7
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
CakeRequest::onlyAllow() について
CakeRequest::onlyAllow() についてCakeRequest::onlyAllow() について
CakeRequest::onlyAllow() について
 
Nginx lua
Nginx luaNginx lua
Nginx lua
 

Andere mochten auch

マインドハック研究会 ライフハック編 20100512
マインドハック研究会 ライフハック編 20100512マインドハック研究会 ライフハック編 20100512
マインドハック研究会 ライフハック編 20100512
tosch0718
 
社内Gtd勉強会 20101022
社内Gtd勉強会 20101022社内Gtd勉強会 20101022
社内Gtd勉強会 20101022
tosch0718
 
Software Foundation:形式的証明と非形式的証明
Software Foundation:形式的証明と非形式的証明Software Foundation:形式的証明と非形式的証明
Software Foundation:形式的証明と非形式的証明
T T
 
関西ライフハック研究会×アイデアプラント
関西ライフハック研究会×アイデアプラント関西ライフハック研究会×アイデアプラント
関西ライフハック研究会×アイデアプラント
Rikie Ishii
 
ライフハック研究会Lt大会20120519
ライフハック研究会Lt大会20120519ライフハック研究会Lt大会20120519
ライフハック研究会Lt大会20120519
Yasutaka Nariki
 
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
満徳 関
 
DXライブラリのすゝめ
DXライブラリのすゝめDXライブラリのすゝめ
DXライブラリのすゝめ
Daisuke Nikura
 
NetBSDとは
NetBSDとはNetBSDとは
NetBSDとは
miwarin
 

Andere mochten auch (20)

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

Ähnlich wie 実用裏方 Perl 入門

Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
Kiwamu Okabe
 

Ähnlich wie 実用裏方 Perl 入門 (20)

Mincs 日本語版
Mincs 日本語版Mincs 日本語版
Mincs 日本語版
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
ソフトウェア工学2023 07 バージョン管理
ソフトウェア工学2023 07 バージョン管理ソフトウェア工学2023 07 バージョン管理
ソフトウェア工学2023 07 バージョン管理
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
Debug Hacks Conference 2009
Debug Hacks Conference 2009Debug Hacks Conference 2009
Debug Hacks Conference 2009
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
20170124 linux basic_1
20170124 linux basic_120170124 linux basic_1
20170124 linux basic_1
 
【プログラミング教室】テキスト
【プログラミング教室】テキスト【プログラミング教室】テキスト
【プログラミング教室】テキスト
 
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
仮想化技術として注目されているDocker入門 - PASONATECH ADVANTAGE SEMINAR
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
 
dm-thin-internal-ja
dm-thin-internal-jadm-thin-internal-ja
dm-thin-internal-ja
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門今さら聞けない人のためのDocker超入門
今さら聞けない人のためのDocker超入門
 
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 

Mehr von keroyonn

Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろうPerl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
keroyonn
 
Perlで次世代ゲーム開発
Perlで次世代ゲーム開発Perlで次世代ゲーム開発
Perlで次世代ゲーム開発
keroyonn
 
Perl logging
Perl loggingPerl logging
Perl logging
keroyonn
 

Mehr von keroyonn (6)

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

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

実用裏方 Perl 入門

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