2013年 11月 の投稿一覧

Chefでcron設定をする

データベースサーバをChefで構築することを行っていて、そのサーバにバックアップスクリプトを撒いて併せてcronで定期的にバックアップを行わせることを行いたかったのでその際のメモです。

ここに全てが記載されていますがchefでcron設定を行う場合、以下の様な記述をrecipeに記載することで実現できます。

cron "Backup script" do
user "remper"
command "/bin/sh /home/foo/backup_script"
hour "3"
minute "55"
end

上記の様な記述だと、

  • remperユーザのcronに設定
  • 実行するコマンドは /bin/sh /home/foo/backup_script
  • 毎日3:55に実行

を意味していることになり、Chefを適用したサーバには、

$ whoami
remper
$ crontab -l
# Chef Name: Backup script
55 3 * * * /bin/sh /home/foo/backup_script

とcronが設定されます。

MongoDBでユーザ認証を有効にする

そして続けて新しく立ち上げた時のユーザ認証と外部ホストから接続できる様にする設定を忘れていたのでメモ...。

mongodb.conf の設定を以下の様にする

  • デフォルトでは bind_ip = 127.0.0.1 が有効になっていてMongoDBと同じホストからのみ接続できる様になっているので無効化
  • 同様に #auth = true となっていてユーザ認証が無効になっているのでこれを解除してユーザ認証を有効化

MongoDBでユーザ追加

滅多にやらないので忘れる...。2回調べたのでメモする。

  • ユーザ: foouser, パスワード:foopassword のユーザを foo_production データベースに追加する場合
$ mongo
MongoDB shell version: 2.0.6
connecting to: test
> use foo_production
> db.addUser("foouser", "foopassword");

unicornでgraceful restartする

unicornを無停止で再起動(新しい設定をリロード) すなわちgraceful restartさせるのにはマスタープロセスに対して kill -s USR2 すると薄ら理解していたのですが、そのためにはきちんと設定がいるのでその際の対応と、実際に行った際に観察したプロセスをメモしておきます。

まず、設定しているunicorn.confには以下の設定を記載しておきます。

よく参照されているunicorn.conf.rb の中でコメントアウトされている辺りを有効にする必要があります。

また、リスタート時にGemfileのパスを強制的に指定させる様にしているのは、graceful restartさせた後に新しいGemfileの更新を適用させるためです。

上の記述がある状態でunicornを起動していれば、USR2シグナルをmasterのプロセスに送るとgraceful restartできます。

試しに手動でプロセスをkillしてみます。まずは現状を確認。masterのプロセスは7864であることが確認できます。

remper    7864 66.2  7.1 320460 72732 ?        Sl   23:11   0:05 unicorn master -c config/unicorn.conf -E production -D
remper    7876  0.0  6.7 320460 69156 ?        Sl   23:11   0:00 unicorn worker[0] -c config/unicorn.conf -E production -D
remper    7880  0.0  6.7 320460 69148 ?        Sl   23:11   0:00 unicorn worker[1] -c config/unicorn.conf -E production -D

この状態から、master processをkillしてみます。

$ kill -s USR2 (unicorn master processのPID, ここでは7864)

とすると、現行のmasterが新しいmasterをforkします。
(下のプロセス一覧だと7908というPIDが該当)

remper    7864 15.2  7.1 320460 72900 ?        Sl   23:11   0:05 unicorn master (old) -c config/unicorn.conf -E production -D
remper    7876  0.0  6.8 321488 69744 ?        Sl   23:11   0:00 unicorn worker[0] -c config/unicorn.conf -E production -D
remper    7880  1.2  7.0 320896 71576 ?        Sl   23:11   0:00 unicorn worker[1] -c config/unicorn.conf -E production -D
remper    7908 57.0  2.2  84032 23164 ?        Rl   23:11   0:00 ruby /〜/releases/11/vendor/bundle/ruby/1.9.1/bin/unicorn -c config/unicorn.conf -E production -D

そして、いままでのmasterから生えていたworkerが無くなって、新しいworkerが新しいmasterから生えてきます。

下の一覧だと unicorn worker[(0|1)] というプロセスのPIDが上のPID一覧のものと換わっているのがわかります。

remper    7908 44.6  7.1 320580 72736 ?        Sl   23:11   0:05 unicorn master -c config/unicorn.conf -E production -D
remper    7922  0.0  6.7 320580 69116 ?        Sl   23:11   0:00 unicorn worker[0] -c config/unicorn.conf -E production -D
remper    7926  0.1  6.7 320580 69112 ?        Sl   23:11   0:00 unicorn worker[1] -c config/unicorn.conf -E production -D

ということで、unicorn.confに適切な設定を記載することでgraceful restartさせることができました。

そして、もろもろこの辺り調べていると大抵私が所属しているペパボのエンジニアの方のブログにぶつかって便利。そして感謝。

参照

Unicornのgraceful restartで少しハマった件 - blog.tnmt.info

追伸

はてなブログから移設した際にgraceful restartのスクリプト例が崩れていたのでgistで貼り直しました。

気温

気温差が激しくて微妙に調子の悪い一週間だった。本当に微妙だったので来週はすっきり過ごしたい。

気づけば11月も半分だし、時間が過ぎるのが早くて怖い。

1995年のスティーブ・ジョブズ インタビュー

1995年に収録されたスティーブ・ジョブズのインタビュー動画が公開されていたのを電車の中で見た。

インターネットとオブジェクト指向がキーワードで、あとこの時点でインターネットを利用した購買が革命を起こしていくということを的確に指摘されていた。

NeXTSTEP (そしてObjective-C) がベースとなってMacOS Xになって、それが今のiPhone OSにも受け継がれる系譜になっている訳で全て95年の時点で見えていたのかなと思うと興味深かった。