狐の社

覚書とかとか

daemontools 覚書

daemontoolsFreeBSDに入れて設定してみた時の覚書

FreeBSDならば、pkgでinstallできる。

# pkg search daemontools
daemontools-0.76_18            Service monitoring and logging utilities by djb

※ソースからインストールする場合は、以下の手順を追うことになるらしい?

installが終わったら、自動起動の設定をします。
FreeBSDならば、rc.confに以下の様に記載することになるでしょう。

svscan_enable ="YES"

基本的に、/usr/local/etc/rc.d以下にある、svscanの中身を確認すると
rc.confに記載する内容がわかります。

rc.d以下のスクリプトを利用せずに起動する場合は、以下を用いると良さそう(?)

csh -sf 'svscan /service &'

また、上記の内容で自動化したい場合は、rc.localを作成して以下のように記載すると良い?(引用元)

env - PATH=/usr/local/bin:/usr/bin:/bin csh -sf 'svscan /service &'

次に、daemontoolsで管理したいプログラムを指定します。

適当に、ディレクトリを作成します。

mkdir /myjob

作成したディレクトリ以下に任意のプログラムのrunファイルを作成します。

mkdir /myjob/test_job
touch /myjob/test_job/run
vim /myjob/test_job/run

runファイルには、今回は以下のスクリプトを記述します。

#!/bin/sh

i=1
while [ 1 ];
do
    echo $i
    i= expr $i + 1
    sleep 1
done;

任意のプログラムを実行したい場合は、以下のような記載をする必要があります。

#!/bin/sh
echo starting nginx
exec /usr/local/sbin/nginx

logを吐かせるためには、以下の操作が必要になります。

mkdir /myjob/test_job/log
touch /myjob/test_job/log/run
vim /myjob/test_job/log/run

logを吐かせるためのrunファイルには、今回は以下のように記載します。

#!/bin/sh

exec multilog t n50 ./main

これで、daemontoolで管理した際に、対象プロセスの管理状態についてのログが出力出来るようになります。

最後に、各runファイルの権限の修正をします。

chmod  1755 /myjob/test_job 

test_jobのスティッキービットを立てることで、log以下をsvscanが参照できるためlogを吐く場合は必要です。

これで、一通り準備ができました。

あとは、 /service以下に、 /myjob/test_jobのシンボリックリンクを作成します。

cd /service
ln -s /myjob/test_job

シンボリックリンク作成後は、5秒以内にrunファイルが実行されます。 (この実行によって、execで指定されたプログラムが実行されます。)

svstatを使って実行状態が確認できます。

# svstat /service/test_job
/service/test_job: up (pid 1179) 5845 seconds

svcを利用して、プロセスの起動、終了が制御できます。 ・ 終了

# svc -d /service/test_job
# svstat /service/test_job
/service/test_job: down 6 seconds, normally up

・ 起動

# svc -u /service/test_job
# svstat /service/test_job
/service/test_job: up (pid 12770) 7 seconds

注意点としては、runファイルを修正する場合は、
/myjob/test_jobをリネームして、新規でフォルダ構成を作り直す必要があるとのこと。
(superviseディレクトリが作られると、runファイルの書き換え後の処理が読まれない場合がある模様)

以上が、daemontoolsをいじった時の覚書です。

daemontoolsを弄ってた時に調べたサイトのURL一覧
http://yang.amp.i.kyoto-u.ac.jp/~yyama/FreeBSD/adm-ps/daemontools-j.html
http://www.emaillab.org/djb/daemontools/daemontools-howto.html
http://www.omakase.org/freebsd/daemontools.html
http://keisyu.hateblo.jp/entry/2014/02/12/234834
https://www.slideshare.net/klab-tech/daemontools-systemd (これは、daemontoolsからsystemdへ移行する話の模様)
http://q068891.hatenablog.com/entry/2018/06/10/021338
https://bayashi.net/wiki/linux/daemontools
http://www.marronkun.net/linux/other/daemontools_000039.html
http://www.unixuser.org/~euske/doc/daemontools/myfaq/faq-3.html