supervise 程序監控

2021-07-29 08:01:15 字數 3831 閱讀 4361

**:

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.中斷 休眠中,...