Skip to content

Instantly share code, notes, and snippets.

@nekoya
Created September 17, 2012 15:37
Show Gist options
  • Save nekoya/3738050 to your computer and use it in GitHub Desktop.
Save nekoya/3738050 to your computer and use it in GitHub Desktop.
daemontools

daemontools

what?

http://quox.org/tips/server/daemontools.html が分かりやすい

setup

wget http://www.emaillab.org/djb/daemontools/svscan
chmod +x svscan
sudo mv svscan /etc/init.d
sudo /sbin/chkconfig --add svscan
sudo /etc/init.d/svscan start
  • 安定して稼働するのを確認したらchkconfigをonに
sudo /sbin/chkconfig svscan on

svc

  • serviceの制御コマンド

再起動(TERM)

sudo svc -t /service/{service}

HUP

sudo svc -h /service/{service}

止める

sudo svc -d /service/{service}

上げる

sudo svc -u /service/{service}

svstat

  • サービスの状態を確認するコマンド
sudo svstat /service/{service}

daemontools + uWSGI

run

#!/bin/sh
exec 2>&1
source /var/sites/lism.in/python/bin/activate
exec envdir /service/hello/env \
  setuidgid ryo \
  /var/sites/lism.in/python/bin/uwsgi -M --log-master -H /var/sites/lism.in/python --socket :3000 --file /var/sites/lism.in/hello.py --callable app --processes 4 --stats :1717

log/run

#!/bin/sh
exec /usr/bin/setuidgid ryo /usr/bin/multilog t s16777215 n100 ./main

作業手順

ディレクトリ構成は以下のとおり。

  • /service/foo/'''run''' : 起動スクリプト
  • /service/foo/env : 環境変数ファイル用ディレクトリ
  • /service/foo/log : multilog用ディレクトリ
  • /service/foo/log/'''run''' : multilog起動スクリプト
  • /service/foo/log/main : ログディレクトリ

1.監視対象外のディレクトリで作業 ※最初に隠しディレクトリとして作成すると監視対象からはずれる。

sudo mkdir -p /service/.foo/env
sudo mkdir -p /service/.foo/log/main
sudo touch /service/.foo/run
sudo touch /service/.foo/log/run
sudo chmod +x /service/.foo/run
sudo chmod +x /service/.foo/log/run

2.runスクリプトの編集

runとlog/runをそれぞれ編集。 内容は上記の「[wiki:tech/daemontools#daemontoolsuWSGI daemontools + uWSGI]」を参照。

3.監視対象下におく

sudo mv /service/.foo /service/foo

4.監視状態を以下で確認

sudo svstat /service/foo

uwsgiプロセスの終了?監視対象外化

uwsgiはTERMを送ってもまた立ち上がってくるため、 down → INT → exit → 隠しディレクトリ化 という手順を踏まなくてはいけない。

cd /service/foo
svc -d ./foo && svc -i ./foo && svc -x ./foo && mv ./foo .foo

トラブルシューティング

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment