**:
daemontools讓程序保持通話
linux下程序有時候會莫名的斷掉,我在使用舊版mysql proxy的時候就時常被問題困惱,俗話說:不怕賊偷,就怕賊惦記著;程序斷掉並不可怕,可怕的是沒有任何先兆,稀里糊塗的就斷了,究其原因,一來可能是誤操作引起來的,二來可能是軟體本身的bug造成的,三來也可能是臭名昭著的oom問題等等。最初我是使用
init
的方法來解決這個問題的,不過那個方法稍顯麻煩,下面介紹一下
daemontools
:
# mkdir /package
# chmod 1755 /package
# cd /package
# wget
# tar zxf daemontools-0.76.tar.gz
# rm -f daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# package/install
以上大體是按照官方手冊介紹的安裝步驟進行的,如果你的glibc庫比較新,此時你很可能會遇到下面錯誤:
/usr/bin/ld: errno:
tls definition in /lib/libc.so.6 section .tbss mismatches non-tls reference in envdir.o
/lib/libc.so.6: could not read symbols: bad value
collect2: ld returned 1 exit status
make: *** [envdir] error 1
copying commands into ./command...
cp: cannot stat `compile/svscan': no such file or directory
為了解決這個問題,接著上面的安裝步驟繼續:
# cd src
# wget
# patch < daemontools-0.76.errno.patch
# cd ..
# package/install
如果你對patch有恐懼感,也可以採取手動修改的方式:
# vi src/conf-cc
在最後加上 -include /usr/include/errno.h
缺省會安裝到/usr/local/bin目錄,最好加到path環境變數裡。
接著安裝man手冊:
# wget
# tar zxf daemontools-0.76-man.tar.gz
# cd daemontools-man
# gzip *.8
# cp *.8.gz /usr/share/man/man8
這下安裝應該成功了,你可以用下面命令確認:
# ps -ef | grep svscan
# man svscan
此時你檢視一下inittab檔案:
# cat /etc/inittab
會發現原來daemontools是使用init的方式來保護自己的:
sv:123456:respawn:/command/svscanboot
通過strace命令你能看到系統每隔五秒會核對一下服務:
# strace -p `pidof svscan`
daemontools最經典的搭配是和lighttpd一起使用,下面介紹一下:
先簡單配置乙個可執行的lighttpd,如果已經有了可以略過這段:
如果作業系統是centos或者rhel:
接著需要修改一下/etc/init.d/lighttpd檔案中的執行路徑指向,應該是:lighttpd="/usr/local/sbin/lighttpd",如果你安裝在別的路徑,可以通過type lighttpd命令確認。
按如下命令可以設定服務自動啟動,不過我們就不設定了,自動啟動的工作由daemontools幫我們完成:
如果作業系統是debian或者ubuntu:
這樣lighttpd就安裝好了,可以用/etc/init.d/lighttpd start命令確認一下,確認成功後別忘了/etc/init.d/lighttpd stop掉相應的程序,因為我們下面要配置daemontools來管理lighttpd:
先建立標準的檔案目錄結構(如果作業系統是gentoo,則用/var/services替代/srv):
目錄/srv/lighttpd-main/是755許可權,下面的run指令碼也是755,接著進行必要的設定:
注意:被保護的程序要執行在非daemon模式下,這樣daemontools才能獲得所有權去管理它,流行軟體基本都有相應引數控制這個,比如apache是-dforeground引數,而在lighttpd裡,就是-d引數。
檔案:./run
檔案:./log/run
#! /bin/sh
umask 0027
exec setuidgid nobody multilog ./main
目錄:./log/main/
chown nobody ./log/main/
最後一步:
官方faq
基本都能找到答案。
常用操作:
# svstat /service/lighttpd(檢視lighttpd狀態)
# svc -t /service/lighttpd(重啟lighttpd程序)
(啟動lighttpd程序)
(停止lighttpd程序)
還有幾個其他的類似軟體可供選擇:
runit
, supervisord
, monit
supervise程序管理利器
daemontools是乙個包含了很多管理unix服務的工具的軟體包。其中最核心的工具是supervise,它的功能是監控乙個指定的服務,當該服務程序消亡,則重新啟動該程序。而要新增讓supervise監控的服務非常容易,只需要新增乙個被監控的服務的目錄,在該目錄中新增啟動伺服器的名字為run的指令...
supervise 用來監控服務,自動啟動
atong介紹的這個工具,挺好用的。supervise 官方 cd data test cat test.c include include include int main return 0 cat run bin bash test 執行命令 svstat data test,結果如下 建立服務...
linux 程序監控
1 ps命令 直接在linux系統中輸入 ps 結果如下 預設情況下,ps命令指揮顯示執行在當前控制台下的屬於當前使用者的程序。pid 程式的程序號 tty 程式執行的終端 time 程式執行的時間 引數 在linux系統中,程序的狀態有五種 1.執行 正在執行或在執行佇列中等待 2.中斷 休眠中,...