Glide Note

glidenote's blog

スーパーサーバーSupervisorの導入手順メモ

スーパーサーバーSupervisorの導入方法をいつも忘れるのでメモ。ほとんど@hibomaが 社内Wikiにまとめてた内容のパクリですが、自宅サーバ構築とかで外から見ようと思っても見えないので。いつもありがとう、ひろやん!!

導入環境はScientific Linux 6.1です。(Upstart経由での起動の部分を、init経由での起動にすればCentOS 5系でも動作するかと思います)

Supervisorの導入

easy_installでも良いんですが、pipで導入

sudo yum -y install python-setuptools
sudo easy_install pip
sudo pip install supervisor

log用ディレクトリと、conf用ディレクトリを用意

デフォルトだと/tmp配下にログが吐かれるので、log用ディレクトリの作成

sudo mkdir /var/log/supervisor/

監視するデーモンごとに設定を分けるので、confディレクトリを用意

sudo mkdir /etc/supervisord.d

Supervisorの設定を用意

conf生成用のコマンドで作成

sudo echo_supervisord_conf > /etc/supervisord.conf

zshだとエラー(zsh: permission denied: /etc/supervisord.conf)が出てので、下記コマンドで生成。

sudo su - root -c "echo_supervisord_conf > /etc/supervisord.conf" 

下記のように修正をしてます。

監視するデーモンの設定は

/etc/supervisord.d/hogehoge.ini

みたいな感じで用意します。

Hesoを監視するようにした時の設定の/etc/supervisord.d/heso.iniは下記のような感じです。

Upstart経由でSupervisorを起動

Supervisor自体が落ちたら意味がないので、Upstartで経由で起動。Supervisorが落ちたらUpstartが自動で起動。
etc/init/supervisord.conf を用意

下記コマンドで起動。

sudo initctl start supervisord

psなどでプロセスを確認して起動していればOK。supervisordをkillして自動で起動してくるかも確認。

CentOS 5とかならinittabに下記のような設定をして、init経由で起動させれば良いかと。

Supervisorの各種コマンド

supervisorctl
add             -- Activates any updates in config for process/group
avail           -- Display all configured processes
clear           -- Clear process/multiple-process/all-process log files
fg              -- Connect to a process in foreground mode
help            -- Show help
maintail        -- tail of supervisor main log file
open            -- Connect to a remote supervisord process. (for UNIX domain socket, use unix:///socket/path)
pid             -- Get the PID of supervisord.
quit      exit  -- Exit the supervisor shell.
reload          -- Restart the remote supervisord.
remove          -- Removes process/group from active config
reread          -- Reload the daemon's configuration files
restart         -- Restart process or group.
shutdown        -- Shut the remote supervisord down.
start           -- Start process or groups.
status          -- Get process status info.
stop            -- Stop process or group.
tail            -- tail of process stdout
update          -- Reload config and add/remove as necessary
version         -- Show the version of the remote supervisord process

たとえばHeso用の設定を変更した場合は下記みたいな感じで設定を再読込

sudo supervisorctl reread heso

supervisorctlをzshで補完

supervisorctlコマンドをzshで補完出来るように。 functionsの下に置くと、自動で読み込まれるようになります。

sudo yum -y install hg
mkdir ~/tmp
cd ~/tmp
hg clone https://bitbucket.org/hhatto/zshcompfunc4supervisor
cd zshcompfunc4supervisor
sudo cp _supervisor* /usr/share/zsh/4.3.10/functions/

参考サイト

Trac WikiをVim上で編集する

社内で利用しているTracをVim上から編集出来たら楽だなーと思ってプラグインを探していたら、 VimTracという、そこそこ良いものがありました。

利用環境はTrac 0.12.2.ja1、Vim7.3です。

Trac側のXML-RPCプラグインを利用するので、 もし未導入ならtrac xml-rpc - Google 検索などを 参考にして導入してください。

VimTracの導入

VimTrac - A vim client for the Trac wiki and ticketing system : vim online

プラグインの管理にはVundleを利用しているので、.vimrcか.vimrc.localに下記のような設定を書いてBundleInstall。 Trac-wikiマークアップ用プラグインも一緒に導入。

Bundle 'Trac-Wikimarkup'
Bundle 'VimTrac'
let g:tracServerList = {}
let g:tracServerList['strac'] = 'http://maeda:***********@192.168.25.37/trac/server/login/xmlrpc'
let g:tracServerList['ectrac'] = 'http://maeda:***********@192.168.25.37/trac/ec/login/xmlrpc'
let g:tracServerList['hostrac'] = 'http://maeda:***********@192.168.25.37/trac/hosting/login/xmlrpc'
let g:tracServerList['sharetrac'] = 'http://maeda:***********@192.168.25.37/trac/share/login/xmlrpc'

みたいな感じで設定。*******は自分のtracログイン時のアカウントです。設定の書式は

let g:tracServerList['(Server Name)'] = 'http://(user):(password)@(trac serverpath)/login/xmlrpc'

といった形式。社内Tracは部署ごとに分かれているので、

  • strac
  • ectrac
  • sharetrac

などと私はtracServerListを設定してます。接続するときに利用します。

trac.vimの修正

Vundle経由で導入すると、trac.pyのpathを見つけられないので、~/.vim/bundle/VimTrac/plugin/trac.pyを下記のように修正

trac.vimの利用方法

Tracサーバに接続

tracServerListで設定した名前で接続

:TWServer strac
:TWServer ectrac

新規wikiページの作成

:TWCreate Common/Server/Memo/maeda

wikiページの保存

:TWSave "Comment"

既存wikiページを開く

:TWOpen Common/Server/Memo/maeda

Wikiページの一覧リストからも選択可能です。

ticket一覧を表示

tracServerListで設定した名前で接続

:TTServer strac
:TTServer ectrac

ticket一覧取得は、最初利用出来なかったのですが、XML-RPCのプラグインをXmlRpcPlugin - Trac Hacksの最新のものにして利用できるようになりました。

社内tracなので当たり障りのないページを開いた感じ

社内SNSでmizzyさんから

VimTracって、編集中に別な人がページ更新した場合に、マージできるのかな?

と聞かれたので、検証をしてみたところ何の警告もなく、上書きをしてしまいました!!
doc/trac.txt at master from mjbrownie/Trac.vim - GitHubを見ても特にconflictとかmergeとかは 書いてないので、機能的に無いぽいです。複数人で同時に編集するようなページで利用するでは要注意です。 公式ページhttp://www.ascetinteractive.com.au/vimtracも現在はリンク切れなので、情報はかなり少なめです。

今までブラウザからのWiki編集に慣れてしまっていたので、まだ違和感がありますが、Vimで完結出来るので使い勝手良いです。

BundleInstallすると

E122: Function LoadWikiCommands already exists, add ! to replace it

とかのエラーが出るけど、ちゃんとプラグインのインストールは出来てて、実害は無さそうなのでとりあえず放置で。

disable camera shutter sound on S51SE

/system/build.propを下記のように修正

SU File Manager & Terminalかなんかを使って、 ファイルを差し替えれば完了。

GistクローンのHesoを導入して試してみた

Gistクローンが社内にあったら便利だなーと思って、探していたら

の二つが見つかったので、@laniusさんのHesoを試してみました。

導入環境はScientific Linux 6.1です。

yum -y git gcc
mkdir -p /var/www/
cd /var/www
git clone git://github.com/lanius/heso.git
cd heso
bootstrap.py -d

で必要に応じてbuildout.cfgのhostとportを修正。私は下記のように設定。

修正したら下記を実行して起動。

bin/buildout
bin/server

設定したURLにアクセス。

ちゃんとアクセスできました。

/var/www/heso/bin/server

で起動するとエラーになるので、heso/bin/serverを下記のように修正

起動、停止はSupervisorを利用して、/etc/supervisord.d/heso.iniに

みたいな感じのを用意して管理。

まだ開発途上のようで2011年11月16日時点で

  • 構文で色分けされる対応filetypeが少ない。(src/heso/static/script.jsを確認する限り、javascript,python,ruby,php,css,html,xml,ymlは認識する模様)
  • POSTしたコードの削除
  • 複数人での利用(POSTした人の名前だけでも入力出来れば誰が投稿したかわかって便利)
  • 編集の履歴表示

などが未実装のようですが、TODOを読んでいたら書いてあったので、今後の対応に期待したいと思います。