面对现实,超越自己
逆水行舟,不进则退
C++博客
首页
新随笔
新文章
联系
聚合
管理
posts - 269,comments - 32,trackbacks - 0
<
2013年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(267)
ATL(2)
C++(37)
DataBase(5)
Design Pattern(6)
IOS(11)
Linux(33)
MFC(84)
NodeJS(1)
NSIS(14)
Openfire&Gloox(2)
Product Management(5)
SQLite(3)
STL(10)
VCL
工具(6)
脚本(9)
其他(14)
算法(21)
网络编程(4)
随笔档案
(269)
2016年8月 (1)
2015年3月 (1)
2014年11月 (1)
2014年10月 (1)
2014年9月 (1)
2014年8月 (3)
2014年7月 (5)
2014年6月 (2)
2014年5月 (2)
2014年4月 (2)
2014年3月 (4)
2014年1月 (1)
2013年12月 (4)
2013年11月 (15)
2013年10月 (4)
2013年9月 (9)
2013年8月 (8)
2013年7月 (4)
2013年6月 (1)
2013年5月 (12)
2013年4月 (8)
2013年3月 (8)
2013年2月 (6)
2013年1月 (15)
2012年12月 (2)
2012年11月 (21)
2012年10月 (11)
2012年9月 (30)
2012年8月 (5)
2012年7月 (11)
2012年6月 (20)
2012年5月 (15)
2012年4月 (28)
2012年3月 (6)
2012年2月 (1)
2011年10月 (1)
常用链接
CODEGURU
CODEPROJECT
CSDN
MSDN
MULTI-PLATFORM
NSIS
PUDN
VC-CCTRY
VCKBASE
朋友博客
程序描绘人生
胡满超的技术博客
用自信照亮人生
推荐博客
ggjucheng
k-eckel
Kevin Lynx
陈皓
罗朝辉(飘飘白云)
最新随笔
1. SWIG实现python对c++封装
2. UISearchBar控件(转载)
3. (转载)推荐!国外程序员整理的 C++ 资源大全
4. MFC wcslen获取中文长度
5. Gloox文件传输小记
6. GLOOX 1.0.10注册问题
7. iOS 解决NSString转换为NSURL时包含中文字符
8. iOS 监听 Home键(转载)
9. UIGestureRecognizer学习笔记(转载)——手势识别功能
10. iOS 添加libxml2.dylb 后 找不到
头文件
搜索
积分与排名
积分 - 742918
排名 - 21
最新评论
1. re: MFC检测网络连接和ping IP地址
通过这种方式无法实现对ping结果的侦测,例如ping一个地址X.X.X.X无法知道是可以正常回复,还是请求超时。
--SherlockLee
2. re: C++ Deque(双向队列)
xcvx
--cxv
3. re: 查找CString里面出现某个字符的次数
@JJ
你注意看人家博主用的是哪个版本的重载函数,不是字符,是字符串。
--过客
4. re: MFC COMBOX控件只接受数字和设置数字范围
评论内容较长,点击标题查看
--zju_cfb
5. re: C++ 解析Json——jsoncpp
我喜欢博主的这句话,面对现实,超越自己
--huben
阅读排行榜
1. C++ 解析Json——jsoncpp(123343)
2. C++ Queues(队列)、Priority Queues(优先队列)(49302)
3. C++ Deque(双向队列) (22750)
4. MFC对话框中显示BMP,JPG图片(14684)
5. Richedit使用大全(14464)
评论排行榜
1. C++ 解析Json——jsoncpp(6)
2. MFC检测网络连接和ping IP地址(5)
3. NSIS修改创建文件夹读写权限(2)
4. 最短路径算法—Floyd(弗洛伊德)算法分析与实现(C/C++)(2)
5. MFC bmp图片添加文字(2)
Shell自动生成并安装服务脚本(转载)
一般地,当在目标机器编译安装某个服务程序后,为了使服务能开机自启动和关机自停止,则需要将其添加为系统服务。但不同的Linux系统管理服务的方法不同,如Ubuntu使用update-rc.d命令,而RedHat则使用 chkconfig命令。因此为了能自动识别系统的类型,减少人工控制,编写了一个简单的autosrv脚本,要求至少1个最多2个参数,特点如下:
● 第1个参数只能为install或uninstall,表示安装或卸载服务。
● 第2参数是可选的,表示系统名称,如果没有指定,那么会自动识别,若出现提示错误,则表示应该要显式指定系统名称了。
1
#! /bin/bash
2
# autosrv
3
4
if [ $# -lt 1 ]; then
5
echo "Usage: $(basename "$0") install | uninstall [sysname]"
6
exit
7
elif [ "$1" != "install" -a "$1" != "uninstall" ]; then
8
echo "The first parameter must be install or uninstall"
9
exit
10
fi
11
12
action=$1
13
sysname=$2
14
srv_path=/etc/init.d/srv_name
15
16
if [ -z "$sysname" ]; then
17
sysname=`lsb_release -a | sed -n '2p' | awk '{if($0~/[Uu][Bb][Uu][Nn][Tt][Uu]/) print "ubuntu"; else if($0~/[Dd][Ee][Bb][Ii][Aa][Nn]/) print "debian"; else if($0~/[Rr][Ee][Dd][Hh][Aa][Tt]/) print "redhat"; else if($0~/[Cc][Ee][Nn][Tt][Oo][Ss]/) print "centos"; else print ""}'`
18
if [ -z "$sysname" ]; then
19
echo "Unknown system, please manual special it with the second parameter"
20
exit
21
fi
22
echo "Current system is $sysname"
23
fi
24
25
create_file_ubu
ntu_debia
n()
26
{
27
cat
<
< END
>
$srv_path
28
#! /bin/bash
29
. /lib/lsb/init-functions
30
31
END
32
cat srv_name.body >> $srv_path
33
}
34
35
create_file_redhat_centos()
36
{
37
cat
<
< END
>
$srv_path
38
#! /bin/bash
39
#chkconfig:2345 90 10
40
#description: srv name
41
42
. /etc/rc.d/init.d/functions
43
44
END
45
cat srv_name.body >> $srv_path
46
}
47
48
chmod_file()
49
{
50
chmod u+x $srv_path
51
}
52
53
remove_file()
54
{
55
rm -f $srv_path
56
}
57
58
install_ubuntu_debian()
59
{
60
create_file_ubuntu_debian
61
chmod_file
62
update-rc.d
srv_name
defaults 90 10
63
}
64
65
uninstall_ubuntu_debian()
66
{
67
update-rc.d -f
srv_name
remove
68
remove_file
69
}
70
71
install_redhat_centos()
72
{
73
create_file_redhat_centos
74
chmod_file
75
chkconfig
--add
srv_name
76
}
77
78
uninstall_redhat_centos()
79
{
80
chkconfig
--
del
srv_name
81
remove_file
82
}
83
84
case "$sysname" in
85
ubuntu|debian)
86
if [ "$action" = "install" ]; then
87
install_ubuntu_debian
88
else
89
uninstall_ubuntu_debian
90
fi
91
;;
92
93
redhat|centos)
94
if [ "$action" = "install" ]; then
95
install_redhat_centos
96
else
97
uninstall_redhat_centos
98
fi
99
;;
100
101
*)
102
echo "Currently only support ubuntu, debian, redhat and centos system"
103
exit
104
;;
105
esac
从上可知,自动识别的方法是获取
lsb_release -a
返回的文本再使用awk来匹配
ubuntu
,
redhat
,
debian
,
centos
这几个子串(忽略大小写)。要注意的是,返回的文本可能有所不同,当系统安装了LSB模块时,返回结果如下
没有安装时,返回结果如下
无论哪种情况,要提取分析的都是第2行文本,因此使用了
sed -n '2p'
。srv_name.body是不同系统相同的用于生成最终服务脚本的部分代码文件,通常包含了start,stop,status,restart几个函数,只是没有包含前面的一部分,而这部分则由autosrv脚本来根据不同的系统生成不同的代码。
本文转自:
http://www.cppblog.com/qinqing1984/archive/2014/01/03/205140.html
posted on 2014-04-23 17:06
王海光
阅读(427)
评论(0)
编辑
收藏
引用
所属分类:
脚本
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
SWIG实现python对c++封装
Shell自动生成并安装服务脚本(转载)
使用vbs或者bat脚本修改IE浏览器安全级别和选项
bat批处理静默自动安装证书
xml编码问题
Linux Shell脚本攻略笔记
msi程序安装和卸载
BAT命令
VBS启动应用程序
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理