crontab の割り算と大きな数字
crontab にこんなのが書いてありました
*/120 * * * * $COMMANDS
書いた人は2時間おきに実行したかったんだと思いますが、まあうそっぽいですよね。
ちなみに crontab(5) には "steps" と書いてあります。
Ranges can include "steps", so "1-9/2" is the same as "1,3,5,7,9".
ISC cron 3.0 の entry.c を観察。
まず *
は最小から最大まで、と同じ意味。なるほど。
if (ch == '*') { /* '*' means "first-last" but can still be modified by /step */ num1 = low; num2 = high;
で、num1-num2/num3
の形式で記述されてると num3
を step として単純に num1
から num2
まで増やしてる。大きすぎる数字を入れると一発目しか実行されない。
/* range. set all elements from num1 to num2, stepping * by num3. (the step is a downward-compatible extension * proposed conceptually by bob@acornrc, syntactically * designed then implmented by paul vixie). */ for (i = num1; i <= num2; i += num3) if (EOF == set_element(bits, low, high, i)) return EOF;
結論
大きな数字を書いても意味がない
Twitterでのやりとり
@songmu さんの言う通りの結論でした。
@tatsuru アスタリスクって、そのレンジのエイリアスみたいなものだから、*/120は、分だと0-59/120 と同じなので、0分だけ動きそう。もしくは動かない。
— songmu (@songmu) 2014, 12月 17
新しいReserved Instance
AWSの新Reserved Instanceの話です。
Amazon Web Services ブログ: 【AWS発表】EC2のリザーブドインスタンスモデルがシンプルに
購入オプションを見ると、Heavy Usage がなくなって焦ったのでがんばって追いつきました。こちらの記事がたいへん参考になりました。
Amazon EC2のリザーブドインスタンスで重度の購入オプション拡充&軽度/中度の廃止 | cloudpack技術情報サイト
どうなったのか
三行で
- 従来の "Heavy Utilization" のみに集約された
- 初期費用の払い方で、最初に一括・半分払って残りは月々・初期費用無し月額のみ、の3つのオプションあり。真ん中が従来のと同じ
- インスタンス起動の有無に関わらず料金は同じ
感想
基本Heavyで買って、AutoScale な部分をどうするか、〜〜〜、これは人間が考えるものではない!!!という議論をしていましたが、過去のものとなりました。使う分だけ買いましょう。
リソース確保のためだけに light っていうやり方ができなくなりました(最近はそんなに困らなくなったんでしょうか)。料金面では、頑張らなくて良くなった分、頑張っていたよりは高くなることもあるかもしれませんね。
おまけ
こういうので表にしました https://gist.github.com/tatsuru/fd048d331135b00b30b0
multilog が作るディレクトリのパーミッション
ここで固定されてる。
https://github.com/daemontools/daemontools/blob/master/src/multilog.c#L312
damontools-toaster で堅いこと言うなよ、というパッチを当てたりする。よい子は真似してはいけない。
diff -Naur ./src/multilog.c ../daemontools-0.76/src/multilog.c --- ./src/multilog.c 2014-09-16 15:52:28.654130526 +0000 +++ ../daemontools-0.76/src/multilog.c 2014-09-16 15:51:25.779141973 +0000 @@ -309,7 +309,7 @@ if (fchdir(fdstartdir) == -1) strerr_die2sys(111,FATAL,"unable to switch to starting directory: "); - mkdir(d->dir,0700); + mkdir(d->dir,0755); d->fddir = open_read(d->dir); if ((d->fddir == -1) || (fchdir(d->fddir) == -1)) strerr_die4sys(111,FATAL,"unable to open directory ",d->dir,": ");
Docker Index Trusted Build してみた
Docker Index の Trusted Build ってやつをやってみた。
tatsuru/ikachan Repository | Docker Index
やり方はこの辺に書いてある通り Docker Index Help Documentation and Support | Docker Index
- まずは適当にリポジトリを作る tatsuru/docker-images · GitHub
- Dockerfile 1枚のリポジトリが並ぶのは嫌だったので、ikachan/ 以下に Dockerfile と README を置く。
- Trusted Build のページから適当に Build 追加。Github の hook が作られる。
- 自動ビルドされるので、 build statusのページ を眺めるだけ
- Build Queue ってのがあって、自分の場合は20分くらい時間がかかった。CI的に使うには向いてなさそう。
- ビルドされたら Transfer Queue に入って転送される。これはすぐに終わった。
repository information には README.md と Dockerfile がうまいこと結合されたやつが入ってた。
公開用のビルドは全部これでやると、たしかに安心できる。もうちょっと速くなればなぁ。
ikachan docker image
Ikachan が動く docker image 作った。
tatsuru/ikachan Repository | Docker Index
ikachan 動かしたいことがたまにあるけど、モジュールが入らなかったりして面倒だったので公開 docker コンテナにしてさくっと動かすようにした。何かツールを動かしたい時も、一式全部 docker コンテナにしておくと何も考えなくてよくなっていいな。
docker push が耐えられないほど遅くて、しかもたまにこけるので、よく使うやつじゃないとやる気がでない。
JAWS DAYS 2014 発表してきました
JAWS DAYS 2014
ちょっと前の話になりますが、JAWS DAYS 初参加・初発表してきました。発表については会社の方のレポートが詳しいのでそちらでどうぞ。
【イベント登壇レポート】JAWS DAYS 2014で、Miiverseの取り組みを弊社エンジニア渡辺が任天堂と共同で発表しました - Hatena Developer Blog
Jaws Days 2014 Miiverse // Speaker Deck
参加者としての感想をいくつか。
- 1000人規模のイベントで AWS の盛り上がりが相変わらずすごい
- Immutable Infrastracture なんかはとくに盛り上がっていて立ち見状態。あまり見られなかった…
- ELB じゃなくて HAProxy を使っているところが多い。ELBけっこうつらい部分も多いですね。安いのでなるべく使いたいんですが..
- 弊社でも HAProxy けっこうパフォーマンスつらいのでいろいろ検証してもらってます EC2のc3インスタンスでSR-IOVを使うときのNICドライバパラメータ検証 - ゆううきブログ
- 個人的には CookPad さんやDeNA さんの発表が面白かったです。
いろいろやりがいがある環境なのでどんどん改善していきたいと思います
■
よくサンプルにあるやつ
require 'aws-sdk' ec2 = AWS::EC2.new( :access_key_id => ACCESS_KEY, :secret_access_key => SECRET_KEY, :ec2_endpoint => 'ec2.ap-northeast-1.amazonaws.com' )
IAM role を設定したインスタンスだと、ACCESS_KEY, SECRET_KEY は自動で取得してくれて便利
ec2 = AWS::EC2.new
途中でリージョン変えるのは適当にこういう感じで
ec2 = ec2.regions[region] ec2.instances.filter('instance-state-name', 'running')
client を使うとAPIだいたいそのまま叩けていいんだけど、この方法だと region 設定できないので注意する。そのまま多々気に入ってるだけみたい
ec2 = AWS::EC2.new client1 = ec2.client # これは us-east-1 client2 = ec2.regions['ap-northeast-1'].client # これも us-east-1 client3 = AWS::EC2.new(:ec2_endpoint => 'ec2.ap-northeast-1.amazonaws.com').client #ちゃんと設定すると ap-northeast-1 を向く