INI LIKEフォーマットをparse
node.jsのプログラムから、ansibleのinventory に記載した hosts情報を使ってごにょごにょしたいような場合、INI フォーマットをparseする ini モジュールを使えば簡単。
iniファイル [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com
iniモジュールで parseして出力
var ini = require('ini'); var output = ini.parse(fs.readFileSync('/ansible/inventory/nodejs/web-dev', 'utf-8')); console.log(output);
出力結果
{ webservers: { 'foo.example.com': true, 'bar.example.com': true }, dbservers: { 'one.example.com': true, 'two.example.com': true, 'three.example.com': true } }
複数ホスト、ファイルを同時にtailできるmultitailコマンド
複数ホストにまたがるログファイルを同時にtail できるコマンドがあったのでメモ。
yum install multitail
でインストールするだけ。
ホストAのログファイルXとホストBのログファイルをYを連結してtailfする場合は下記のようなコマンド。
multitail -l "ssh username@hostA tail -f /var/log/XXX.log" -L "ssh username@hostB tail -f /var/log/YYY.log"
ウインドウを分けて表示する場合は、二つ目のオプションの "-L"を"-l"にすればおk。
"-e"オプションを使えば、正規表現で出力内容をフィルタリングできる。
nodeでファイルの拡張子を厳格に指定して読み込み
nodeのプロジェクトで、/lib/service/index.js などのファイルから、同ディレクトリ配下のjsファイルを一括してexportsさせるケースがある。例えば下記のようなコード。
var fs = require('fs'); var path = require('path'); var _ = require('lodash'); _.forEach(_.filter(fs.readdirSync(__dirname), function (name) { return ('index.js' !== name); }), function (name) { var basename = path.basename(name, suffix); exports[basename] = require('./' + basename); });
これでうまく動いていたが、ある日突然nodeが死亡するケースが起きた。
原因を調べてみると、この index.jsのexports処理で不正なファイルを読み込もうとして落ちていた。
この不正なファイルというのが、「hoge.js.swp」といった vim でファイルを開いた時に自動で作られるswapファイルだった。
というわけで、余計なファイルを読み込まないように pathモジュールのextname()関数を用いて厳格にファイル拡張子を指定すれば問題なくなった。
path.extname(filename) === .'js'
tmuxのconf
いくつかのtmux設定記事を参考にして、適当な設定を自分向けに書いたのでメモ。
https://github.com/kidooom/tmux/blob/master/.tmux.conf
よく使うキーバインドとしては、(prefixはCtrl+aに変更してます)
C-a ? : ヘルプ
C-a [0-9] : window移動
C-a o : pain移動
C-a x: pain終了
C-a - : 水平分割
C-a | : 垂直分割
C-a d: デタッチ
tmux a: 最後にデタッチしたセッションにアタッチ
tmuxとtmuxinatorで開発環境別のコンソール環境整備
dev環境で作業やログ調査をする際に、webサーバをsshで開いてlogをtailして dbサーバをsshで開いてlogをtailしてmanagerサーバを(略)するのが面倒なので、tmuxとtmuxinatorを使ってコマンド一発でこの環境が開くようにする。
- tmuxのインストール
$ brew install tmux
- tmuxinatorのインストール
$ gem install tmuxinator $ echo ' [[ -s $HOME/.tmuxinator/scripts/tmuxinator ]] && source $HOME/.tmuxinator/scripts/tmuxinator ' >> ${HOME}/.bashrc $ source ${HOME}/.bashrc $ echo 'export EDITOR=/usr/bin/vim' >> ${HOME}/.bashrc $ echo 'export SHELL=/bin/bash' >> ${HOME}/.bashrc $ source ${HOME}/.bashrc // 動作確認 $ mux doctor
tmuxinatorのプロジェクトを作成する
mux new hogehoge
実行すると $EDITOR に設定したエディタで ~/.tmuxinator ディレクトリ以下に作成された yml ファイルが開くので、下記のような設定をした。
# ~/.tmuxinator/hoge.yml name: hoge root: ~/ windows: - web: layout: main-vertical panes: - ssh $SSH_USERNAME@hogeweb - ssh $SSH_USERNAME@hogeweb -t tailf /var/log/error.log - ssh $SSH_USERNAME@hogeweb -t tailf /var/log/api.log - db: layout: main-vertical panes: - ssh $SSH_USERNAME@hogedb - ssh $SSH_USERNAME@hogedb -t mongo - redis: layout: main-vertical panes: - ssh $SSH_USERNAME@hogeredis
layoutなどは適当なので、今後調節していく。
このconfファイルを社内のリポジトリに登録しておけば、チーム内でコンソール環境を共有できて良さげ。
- 作者: 戸田 薫
- 発売日: 2012/12/30
- メディア: Kindle版
- クリック: 2回
- この商品を含むブログを見る
Jenkinsジョブをリモートからビルド実行
管理ツールなど外部サーバからJenkinsのジョブを実行したい場合、Jenkinsのジョブ設定にある下記のリモートビルドの設定を行えばOK.
後は、外部サーバから設定したtoken付随のURLを叩くとjobが実行される。