・ Web系SE募集 (技術開発部開発系エンジニア・Java/Tomcat 420万円~750万円)
   ・ 社内SE募集 (業務系システムの開発・社内イントラ)

2009年11月アーカイブ

サービス起動

$ sudo svc -u /service/demo/

サービス停止

$ sudo svc -d /service/demo/

サービスの再起動

$ sudo svc -t /service/demo/

サービスとログの停止

$ sudo svc -d /service/demo/ /service/demo/log/

サービスとログの起動

$ sudo svc -u /service/demo/ /service/demo/log/

全ての サービスとログの停止

$ sudo svc -d /service/* /service/*/log

全ての サービスとログの起動

$ sudo svc -u /service/* /service/*/log

 

前回の記事「daemontools で プログラムをデーモン化する。 (1) インストールする。」に引き続き、サービスの登録準備をします。

サービスのディレクトリの作成とデーモン化したいプログラムの用意

$ sudo mkdir /var/daemontools

この下にサービス名でディレクトリを作っていくことになる。

デーモン化したいプログラム例:

$ cat /home/suzu/work/demo_daemon.pl
#!/bin/env perl
# デモ
$|=1;

our $sigDown = '';
$SIG{TERM} = $SIG{INT} = sub {$sigDown = shift;};

our $sigUser = '';
$SIG{USR1} = $SIG{USR2} = sub {$sigUser = shift;};

print "[UP]\n";
our $count = 0;
while(1){
    $count++;
    print "COUNT: $count\n";
    $sigDown and warn("[SIG-$sigDown]\n"), last;
    $sigUser and warn("[SIG-$sigUser]\n"), $sigUser='';
    sleep 1;
}
printf "[DOWN]\n";

__END__

上記のデモプログラムを登録するために /var/daemontools の下にPATHを用意。

$ sudo mkdir -p /var/daemontools/demo/log

サービス起動用スクリプトを用意

$ cat > /var/daemontools/demo/run
#!/bin/sh
exec 2>&1
exec /home/suzu/work/demo_daemon.pl

$ chmod 775 /var/daemontools/demo/run

ログ出力用スクリプトを用意

$ cat > /var/daemontools/demo/log/run
#!/bin/sh
exec multilog t  -'*' +'*COUNT*' ./count  -'*' +'*[SIG-*' ./sig   +'*' ./main

$ chmod 775 /var/daemontools/demo/log/run

サービス登録と動作確認

サービス登録前のプロセス

$ ps axf
20787 ?        Ss     0:00 /bin/sh /command/svscanboot
20789 ?        S      0:00  \_ svscan /service
20790 ?        S      0:00  \_ readproctitle service errors:

サービス登録

$ sudo ln -s /var/daemontools/demo/ /service/

サービス登録後のプロセス

$ ps axf
20787 ?        Ss     0:00 /bin/sh /command/svscanboot
20789 ?        S      0:00  \_ svscan /service
30156 ?        S      0:00  |   \_ supervise demo
30159 ?        S      0:00  |   |   \_ perl /home/suzu/work/demo_daemon.pl
30157 ?        S      0:00  |   \_ supervise log
30245 ?        S      0:00  |       \_ multilog t -* +*COUNT* ./count -* +*[SIG-* ./sig +* ./main
20790 ?        S      0:00  \_ readproctitle service errors: ...pervise: fatal: unable to start log/run: access denied?supervise: fatal: unable to start log/run: access denied?supervise: fatal: unable to s

ログ確認

$ tai64nlocal < /var/daemontools/demo/log/main/current
$ tai64nlocal < /var/daemontools/demo/log/count/current
$ tai64nlocal < /var/daemontools/demo/log/sig/current

シグナルを送ってみる。

シグナル送信状況をログで確認しながら

$ tail -f /var/daemontools/demo/log/main/current | tai64nlocal

シグナル送信

$ sudo pkill -USR1 -f demo_daemon

ログの例

2009-11-07 07:49:34.327045500 COUNT: 5
2009-11-07 07:49:35.327809500 COUNT: 6
2009-11-07 07:49:36.328742500 COUNT: 7
2009-11-07 07:49:36.406393500 COUNT: 8
2009-11-07 07:49:36.406398500 [SIG-USR1]
2009-11-07 07:49:37.403580500 COUNT: 9
2009-11-07 07:49:38.404430500 COUNT: 10
2009-11-07 07:49:39.405269500 COUNT: 11

停止

$ sudo svc -d /service/demo/

停止後のプロセス

$ ps axf
0787 ?        Ss     0:00 /bin/sh /command/svscanboot
20789 ?        S      0:00  \_ svscan /service
30156 ?        S      0:00  |   \_ supervise demo
30157 ?        S      0:00  |   \_ supervise log
30245 ?        S      0:00  |       \_ multilog t -* +*COUNT* ./count -* +*[SIG-* ./sig +* ./main
20790 ?        S      0:00  \_ readproctitle service errors: ...pervise: fatal: unable to start log/run: access denied?supervise: fatal: unable to start log/run: access denied?supervise: fatal: unable to s

PerlでSSL対応IRCサーバーの作り方」にある、IRCサーバーをデーモン化するために、実は次の様なコマンドでバックグラウンドで動かしてました。

./poe_irc_server 2>&1 | perl -ne 'BEGIN{$|=1};(/^..P[I|O]NG/ or /<-:irc.arbolbell.jp 372/) or print(scalar(localtime)." # ".$_)'  >> $HOME/logs/ircd.txt &

そんな事はせずとも、daemontools は、デーモン化も、プロセス監視とプロセス自動起動も、そしてログの面倒まで見てくれる。なんとも素晴らしいツールです。

そして、インストールすると

$ tail -n1 /etc/inittab
SV:123456:respawn:/command/svscanboot

という事で、何かしらの不手際により daemontools 自体がダウンしたとしても、直ぐに起動して管理下のサービスをデーモン化してくれます。
ですので、何が何でも起動していてほしいシステムを daemontools でデーモン化して管理しておけば、無問題。

◆ソースの取得とインストール

$ cd /tmp/
$ wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

$ cd /usr/local/
$ sudo tar xzvf /tmp/daemontools-0.76.tar.gz
$ cd /usr/local/admin/daemontools-0.76/

コンパイルオプションの修正

$ sudo vim src/conf-cc

変更内容

$ diff src/conf-cc /tmp/admin/daemontools-0.76/src/conf-cc
1c1
< gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings --include=/usr/include/errno.h
---
> gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings

インストール

$ sudo package/install

確認

$ ls -lt /
合計 156
drwxr-xr-x   2 root root  4096 11月  5 23:43 command
drwxr-xr-x  90 root root 12288 11月  5 23:43 etc
drwxr-xr-x   2 root root  4096 11月  5 23:43 service
drwxrwxrwt   8 root root  4096 11月  5 23:43 tmp
drwxr-xr-x  11 root root  3960 10月 19 00:05 dev
drwxr-x---  10 root root  4096 10月 15 14:31 root
drwxr-xr-x   2 root root 12288 10月 15 04:10 sbin
drwxr-xr-x  14 root root  4096 10月 15 04:09 lib
drwxr-xr-x   7 root root  4096  9月 18 19:55 home
drwxr-xr-x  11 root root     0  5月  8 15:11 sys
dr-xr-xr-x 116 root root     0  5月  8 15:11 proc
drwxr-xr-x   2 root root  4096  5月  8 06:12 media
drwxr-xr-x   2 root root     0  5月  8 06:12 net
drwxr-xr-x   2 root root     0  5月  8 06:12 misc
drwx------   2 root root 16384 11月 27  2008 lost+found
drwxr-xr-x   2 root root  4096 11月 27  2008 bin
drwxr-xr-x  22 root root  4096 11月 26  2008 var
drwxr-xr-x   3 root root  4096 11月 26  2008 boot
drwxr-xr-x  14 root root  4096 11月 26  2008 usr
drwxr-xr-x   2 root root  4096 11月 26  2008 selinux
drwxr-xr-x   2 root root  4096  3月 30  2007 mnt
drwxr-xr-x   2 root root  4096  3月 30  2007 opt
drwxr-xr-x   2 root root  4096  3月 30  2007 srv

$ ls -lt /command/
合計 0
lrwxrwxrwx 1 root root 43 11月  5 23:43 envdir -> /usr/local/admin/daemontools/command/envdir
lrwxrwxrwx 1 root root 46 11月  5 23:43 envuidgid -> /usr/local/admin/daemontools/command/envuidgid
lrwxrwxrwx 1 root root 43 11月  5 23:43 fghack -> /usr/local/admin/daemontools/command/fghack
lrwxrwxrwx 1 root root 45 11月  5 23:43 multilog -> /usr/local/admin/daemontools/command/multilog
lrwxrwxrwx 1 root root 45 11月  5 23:43 pgrphack -> /usr/local/admin/daemontools/command/pgrphack
lrwxrwxrwx 1 root root 50 11月  5 23:43 readproctitle -> /usr/local/admin/daemontools/command/readproctitle
lrwxrwxrwx 1 root root 44 11月  5 23:43 setlock -> /usr/local/admin/daemontools/command/setlock
lrwxrwxrwx 1 root root 46 11月  5 23:43 setuidgid -> /usr/local/admin/daemontools/command/setuidgid
lrwxrwxrwx 1 root root 46 11月  5 23:43 softlimit -> /usr/local/admin/daemontools/command/softlimit
lrwxrwxrwx 1 root root 46 11月  5 23:43 supervise -> /usr/local/admin/daemontools/command/supervise
lrwxrwxrwx 1 root root 40 11月  5 23:43 svc -> /usr/local/admin/daemontools/command/svc
lrwxrwxrwx 1 root root 41 11月  5 23:43 svok -> /usr/local/admin/daemontools/command/svok
lrwxrwxrwx 1 root root 43 11月  5 23:43 svscan -> /usr/local/admin/daemontools/command/svscan
lrwxrwxrwx 1 root root 47 11月  5 23:43 svscanboot -> /usr/local/admin/daemontools/command/svscanboot
lrwxrwxrwx 1 root root 43 11月  5 23:43 svstat -> /usr/local/admin/daemontools/command/svstat
lrwxrwxrwx 1 root root 43 11月  5 23:43 tai64n -> /usr/local/admin/daemontools/command/tai64n
lrwxrwxrwx 1 root root 48 11月  5 23:43 tai64nlocal -> /usr/local/admin/daemontools/command/tai64nlocal

後かたずけ

$ rm /tmp/daemontools-0.76.tar.gz

 

前回の リアルタイム ランキングの、アクセス数から、アクセス状況を確認できるようにしました。

ランキングにあるURLで、URL毎にフィルタリングしたアクセス状況です。

このアーカイブについて

このページには、2009年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年10月です。

次のアーカイブは2010年1月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。