Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
『自動テストを
頑張って書こう』

という話ではないLT
cronの設定うっかりミスを
ちょっとだけ防げる

テストを書きました
起点となったcronの記述ミス(イメージ)
: * 19 * * * php hoge.php
○: 0 19 * * * php hoge.php
19時に一度だけ起動して欲しいスクリプト
が、19時台に毎分動いてしまった
http://
masartz.hatenablog.jp/
entry/2015/01/23/120113
対象ユーザー

・phpを使ってる
・cron.txt的なものがリポジトリにある
・cronをめっちゃたくさん設定してる
<Before>
* 19 * * * php hoge.php
<After>
* 19 * * * php hoge.php
###prev 2014-12-31 19:00:00
###next 2015-01-01 19:00:00
cron-expression の機能

・cron設定文字列(* 19 * * *)を引数にオブジェクト生成
・そのオブジェクトは2つのメソッドを持ち、

それぞれ指定時刻から見て以下が算出できる

 getPreviousRunDate =...
* 19 * * * php hoge.php
###prev 2014-12-31 19:00:00
###next 2015-01-01 19:00:00
これだと、テスト落ちる
0 19 * * * php hoge.php
###prev 2014-12-31 19:00:00
###next 2015-01-01 19:00:00
これだと、テスト通る
大事なこと
「自動テストを頑張って書こう」
大事なこと
「自動テストを頑張って書こう」
障害の捉え方
・再発の影響度合い(頻度x深刻度)
・・今後もすぐ or 何度も発生しうるか
・・発生した時の影響範囲が広い or 損失が大きいか
・・システムで解決できることか or 仕方がないことか
再発防止策の優先順位
・根本解決する
・自...
良くない対応
・cron設定をダブルチェックします
・PHPでwhenever的なものを実装する
・wheneverを使うためについでにプロダクトをRubyにする etc…
まぁまぁな対応
・cronを簡単にparseして、少しチェックしてみる...
大事なこと
『テストを書くのは大原則』

 その上で、

 適切なリソースで、適度な再発防止を!
        ↓
障害報告と再発防止策のさわりのネタでした
Upcoming SlideShare
Loading in …5
×

「自動テストを頑張って書こう」という話ではないLT

387 views

Published on

社内LTから内部資料を削った版

Published in: Technology
  • Be the first to comment

  • Be the first to like this

「自動テストを頑張って書こう」という話ではないLT

  1. 1. 『自動テストを 頑張って書こう』
 という話ではないLT
  2. 2. cronの設定うっかりミスを ちょっとだけ防げる
 テストを書きました
  3. 3. 起点となったcronの記述ミス(イメージ) : * 19 * * * php hoge.php ○: 0 19 * * * php hoge.php 19時に一度だけ起動して欲しいスクリプト が、19時台に毎分動いてしまった
  4. 4. http:// masartz.hatenablog.jp/ entry/2015/01/23/120113
  5. 5. 対象ユーザー
 ・phpを使ってる ・cron.txt的なものがリポジトリにある ・cronをめっちゃたくさん設定してる
  6. 6. <Before> * 19 * * * php hoge.php <After> * 19 * * * php hoge.php ###prev 2014-12-31 19:00:00 ###next 2015-01-01 19:00:00
  7. 7. cron-expression の機能
 ・cron設定文字列(* 19 * * *)を引数にオブジェクト生成 ・そのオブジェクトは2つのメソッドを持ち、
 それぞれ指定時刻から見て以下が算出できる
  getPreviousRunDate = 「直前の実行時間」
  getNextRunDate = 「直後の実行時間」 テストで比較するもの
 ・実行値:cron設定行のcron-expression読み取り結果 ・期待値:おまじない(prev/next)の2行の記述
  8. 8. * 19 * * * php hoge.php ###prev 2014-12-31 19:00:00 ###next 2015-01-01 19:00:00 これだと、テスト落ちる
  9. 9. 0 19 * * * php hoge.php ###prev 2014-12-31 19:00:00 ###next 2015-01-01 19:00:00 これだと、テスト通る
  10. 10. 大事なこと 「自動テストを頑張って書こう」
  11. 11. 大事なこと 「自動テストを頑張って書こう」
  12. 12. 障害の捉え方 ・再発の影響度合い(頻度x深刻度) ・・今後もすぐ or 何度も発生しうるか ・・発生した時の影響範囲が広い or 損失が大きいか ・・システムで解決できることか or 仕方がないことか 再発防止策の優先順位 ・根本解決する ・自動検知 or 自動復旧する ・影響範囲を局所化する ・現実的に考えて、仕方ないと判断する
  13. 13. 良くない対応 ・cron設定をダブルチェックします ・PHPでwhenever的なものを実装する ・wheneverを使うためについでにプロダクトをRubyにする etc… まぁまぁな対応 ・cronを簡単にparseして、少しチェックしてみる <- 今回の対応 ・cron設定部分だけ切り出してwheneverで動かす環境を作る etc… 良い対応 ・cronで動いているscriptを減らす etc…
  14. 14. 大事なこと 『テストを書くのは大原則』
  その上で、
  適切なリソースで、適度な再発防止を!         ↓ 障害報告と再発防止策のさわりのネタでした

×