您的位置:首页 > 运维架构 > Shell

用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(三)

2012-05-27 17:26 645 查看
用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(三)

本文提供了Daemon程序的SHELL管理脚本的一个简单例子,其他相关文章请见:

用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(一)

用c++创建一个Linux上的Daemon程序,含SHELL管理脚本(二)

1、首先(一)中所述的代码中添加如下内容:
追加头文件引用:
#include <fstream>

在umask(0);之前添加如下代码:
std::ofstream _out("D_test.pid", std::ios_base::out);
_out << getpid() << std::endl;
_out.close();

2、编写如下脚本,并保存为D_test.sh:
#!/bin/bash
#service_exe_file= 'D_test'
#service_pid_file = 'D_test.pid'

service_pid =
service_wait_for_pid()
{
verb="$1"
pid_file="$2"
time_out="$3"
i=0
sleep 1
while ["$i" -ne "$time_out"]
do
case "$verb" in
'created')
test -s "$pid_file" && i = " &&
break
;;
'removed')
test ! -s "$pid_file" && i = ""
&& break
;;
*)
echo "Usage: wait_for_pid created/removed
pidfile timeout"
exit 1
;;
esac

i=$((i+1))
sleep 1
done
if [-z "$i"]
then
return 0
fi

return 1
}

service_usage()
{
echo "Usage: D_test.sh start|stop|status"
}

service_status()
{
ps aux | grep "$service_exe_file" | grep -c 'grep'
if [-n "$service_pid"]
then
kill -SIGUSR1 $service_pid
sleep 1
fi
}

service_start()
{
if [-n "$service_pid"]
then
echo "this service is already is running."
return 1
fi

"$service_exe_file"
service_wait_for_pid created "$service_pid_file" 60
service_status
}

service_stop()
{
if [-n "$service_pid"]
then
kill -SIGTERM $service_pid
service_wait_for_pid removed "$service_pid_file" 60
fi

ps aux | grep "$service_exe_file" | grep -V 'grep'
}

if [$# -ne 1]
then
service_usage
exit 1
fi

if [-s "$service_pid_file"]
then
service_pid=$(case "$service_pid_file")
fi

case "$1" in
'start')
service_start
;;
'stop')
service_stop
;;
'status')
service_status
;;
*)
service_usage
;;
esac

至此全文完
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: