linux下的守護程序

2022-09-26 16:51:17 字數 2170 閱讀 2618

linux下的常駐程序的作用不可忽略,但這裡面的問題也不能忽略,怎麼啟動程序,怎麼結束程序,怎麼在程序掛掉之後重啟程序都要設計的合理。下面看乙個shell控制的php常駐程序的例子。

不廢話,直接撈乾貨,上**,通過**來講解更容易理解:

複製** **如下:

#!/bin/sh

#filename test.sh

#絕對定位該檔案的位置,不隨執行目錄而變化

cd $(cd "$(dirname "$0")";pwd)

readonly path=$(pwd)/

file=$1;

runfile="$data/$.run"

diefile="$data/$.die"

readonly file="$$.php"

if [ ! -f "$file" ]; then

echo "please select a exists file"

elif [ ! -f "$runfile" ]; then

#這裡進行判斷如果runfile檔案不存在,則表示該程序不存在,下面啟動程序

echo $$>$

while true

doif [ ! -f $diefile ]; then

#這裡如果diefile檔案不存在,則表示程式繼續執行,否則進入else,執行退出操作

/usr/bin/php -f $

touch $runfile

sleep 1

else

#如果diefile檔案存在清除runfile和diefile退出

if rm -rf $runfile && rm -rf $diefile ; then

exit

fifi

done

else

wyzpput#這裡是在存在runfile的情況下試圖啟動該程序

oldpid=`cat $runfile`

newpid=`ps aux | grep "process.sh $1" | grep -v grep | grep "$oldpid" | awk ''`

if [[ $oldpid -eq $newpid ]]; then

#如果runfile中的程序號和正在執行的目標程序號一致,表明一切安好^_^

echo "the process is runing now"

exit

else

#如果用runfile中的程序號匹配不到正在執行的目標程序,則表示程序有問題,直接刪除runfile並結束執行的程序

echo "error situation,kill the run process and delete the run file"

ps aux | grep "process.sh $1" | grep -v 'grep' | awk '' | grep -v $$ | xargs --no-run-if-empty kill

if [ $? -eq 0 ]; then

rm -f $runfile

else

echo $?>$/data/error

程式設計客棧   fi

fifi只裡面有幾個要強調的地方:

我用這個shell去呼叫php程式,這個沒有侷限性,這裡要說明的是這種執行常駐程序的方法

在runfile存在,但程序號對不上殺程序時(也就是紅色額else所執行的地方),一定要 `grep -v $$`,作用是過濾掉當前執行的程序,要不然都被殺掉了,將後面的就不執行了

程式設計客棧還有乙個要注意的地方就是關於自動重啟了

自動重啟可以放在crontab中,每隔一段時間執行一次,具體情況具體對待。

複製** **如下:

crontab -e

#開啟當前使用者日程表,新增模式

#日程表中有5個星號,f1,f2,f3,f4,f5,

#其中f1表示分,f2表示時,f3表示日,f4表示月,f5表示乙個星期第幾天  

#*表示www.cppcns.com每分/時/日/月/周天,*/n表示每n分/時/......執行一次

*/2 * * * * /root/test.sh

#沒2分鐘執行一次

這樣乙個完整的常駐程序功能就完成了,想要終止程序是只需要在對應的目錄下進行touch $即可。

本文標題: linux下的守護程序

本文位址: /os/linux/116350.html

linux下的守護程序

守護程序特點 1 生存期長,在系統自舉的時候啟動,僅在系統關閉時終止。2 沒有控制終端,所以說他們是在後台執行的。關於編寫守護程序程式時要遵守的一些基本規則 1 呼叫umask將檔案模式建立遮蔽字設定為0。防止由繼承得來的檔案模式建立遮蔽字可能會拒絕設定某些許可權 2 呼叫fork 然後使得父程序退...

Linux下守護程序的實現

一.fork 函式 通過系統呼叫建立乙個與原程序幾乎一模一樣的程序,可理解為轉殖了乙個自己。fork函式的返回值有下面幾種情況 1.在父程序中返回新建立子程序的的程序id 2.在子程序中返回0 3.呼叫失敗,返回負值 二.程序相關知識 1.程序組 乙個或者多個程序的集合。每個程序組擁有乙個程序組id...

linux下的守護(精靈)程序daemon

include include include include include include include include intmain else if pid 0 2.在子程序中建立新會話 setsid 3.改變當前目錄為根目錄 chdir 4.重設檔案許可權掩碼 umask 0 5.關閉檔...