linux中注册系统服务—service命令的原理通俗
能够使用service命令进行操作的,就是已经注册成为linux的系统服务了。window中也可以注册成为系统服务的办法。
service命令用的次数真不少,就是比较多的关联点,用了很多次了,还是有些地方没打通,云里雾里的。所以才梳理一下这个技术知识点,理顺思路。此时我觉得,很有必要理解service命令的原理性知识了。
了解service命令的来龙去脉,在解决实际问题中的帮助,结合实际应用,我对以下问题有帮助:
1、如果从网上下载一个新的软件,安装到linux上面去。想注册成系统服务,我需要自己编写一个shell脚本文件才行。这个脚本文件如何编写呢?如果不了解servcie命令的机制。会漏掉一些东西了。比如我之前下载的sphinx安装到服务器后。我想使用"service sphinx start"这样的简短命令来管理,就必须注册成为系统服务。而源码包中是没有提供写好的脚本的。必须自己写一个。
知道了来龙去脉,可以减少依赖。像niginx、mysql我们都可以自己编写供servcie调用的脚本文件。
2、使用chkconfig的先决条件。如果要进一步使用"chkconfig --level 3456 sphinx"来自由控制开启和关闭,那么前提必须实现有供调用的脚本文件(也就是这个服务要是系统服务可以让service调用)
以"为什么要注册成为service服务"的角度来理解,这样做的好处是什么,从这里展开来理解。
把一个程序(比如mysql、apache等)注册成系统服务的好处,通俗点理解我觉得包括两个方面:
1、可以使用"service 服务名称"来进行管理,比如常常使用的命令”service httpd start”,就是httpd注册成为一个服务了,于是才不需要写一大串的原始服务路径。
像sphinx的启动手工方式为:”/data/installsoft/sphinx-for-chinese/bin/searchd –c 配置文件”
将sphinx注册成为系统服务后,就可以像"service sphinx start"来启动。
注:sphinx是一个全文搜索服务。为方便理解,可以换成是mysql、apache也行。
把”service sphinx”看成等价于"/data/installsoft/sphinx-for-chinese/bin/searchd"也可以。
关联要点
要把一个程序注册成系统服务,首先得给出一个供service命令调用的脚本文件放到目录"/etc/rc.d/init.d/"中去。
/etc/rc.d/init.d/这个目录下其实就是很多脚本文件。看下面的截图,就是我服务器上列出的文件(其实都是一些shell脚本文件)
现在疑问:这个脚本文件是一个shell文件,假设要自己编写这个脚本,里面要编写什么样的内容呢?
联想一下常常使用的命令:service httpd start、service httpd stop。
注册成系统服务是方便类似上面这样子调用。那么编写的shell脚本只要处理接受start参数应该干嘛,接收stop参数应该干嘛。
实际上,脚本的内容是完全可以按照自己需要来编写。比如我在管理sphinx的时候。我需要重建索引,直接传递一个reindex参数就可以重建:”service sphinx reindex”。
通俗点的理解方式
我习惯于将”service httpd start” 将httpd理解成目录/etc/rc.d/init.d/下的脚本文件httpd(脚本文件与服务名称是同名的),所以service httpd就是去调用/etc/rc.d/init.d/下的脚本文件httpd。
而后面接着的start,则是向/etc/rc.d/init.d/httpd传递一个start参数。归纳一下如下:
service httpd 等价 /etc/rc.d/init.d/httpd
service httpd start 等价 /etc/rc.d/init.d/httpd start
service httpd stop 等价 /etc/rc.d/init.d/httpd stop
注:httpd是一个shell脚本
具体接到这个start参数该如何处理,你爱干嘛就干嘛,你完全可以停掉服务,也可以启动服务。只是按照我们习惯,都是启动服务。
我一般理解”service httpd start “ 命令执行的时候,会去目录”/etc/rc.d/init.d/”目录下寻找一个httpd的脚本文件。有同名文件,就表示服务存在,没有会提示服务不存在。可以试一下使用一个文件名不存在的服务:service jgj start,看看会提示什么信息。
其实就是jgj这个文件不存在。在这个目录里面创建一个jgj文件,就不会告诉你,服务不存在。所以服务存在的条件是同名文件存在,哈哈。
这个时候不会提示服务不存在,是没有执行权限
增加一下执行权限,chmod +x jgj
这个时候会执行jgj脚本文件里面的命令,里面是什么就执行什么,语法错了就报错。
具体例子:sphinx注册成系统服务
原来我启动sphinx服务的命令为 “/data/install/sphinx-for-chinese/bin/searchd –c /data/install/sphinx-for-chinese/ect/shpinx.conf”
重建sphinx中的索引的命令为 “/data/install/sphinx-for-chinese/bin/indexer –c –c /data/install/sphinx-for-chinese/ect/shpinx.conf --all --rotate”
实在太长了,其他不用管是干嘛的,只需要知道–c表示配置文件位置,它后面的值为” /data/install/sphinx-for-chinese/ect/shpinx.conf”
如果我每次都需要这样子来操作,敲命令确实繁琐了。把sphinx加到系统服务中去。
可以使用”service sphinx start”、”service sphinx reindex”很简短的命令来替代上面一大串。
大体意思是,把上面一大串启动的命令和重建索引的命令都放到了/etc/rc.d/init.d/sphinx这个脚本文件中去了(为了通俗点才这么说,当然不是简单复制进去就可以,还要接收start、reindex这些参数)
下面是我用在服务器上名sphinx脚本文件(/etc/rc.d/init.d/sphinx)
# !/bin/bash
# chkconfig: - 85 15
# description: sphinx-for-chinese service
#processname:sphinx
ROOT_PATH=/data/installsoft/sphinx-for-chinese
case "$1" in
start)
echo "Starging sphinx Server..."
$ROOT_PATH/bin/searchd -c $ROOT_PATH/etc/sphinx.conf
;;
stop)
echo "Stopping sphinx Server..."
$ROOT_PATH/bin/searchd --stop
;;
restart)
$ROOT_PATH/bin/searchd --stop
$ROOT_PATH/bin/searchd -c $ROOT_PATH/etc/sphinx.conf
;;
reindex)
echo "reindexing..."
$ROOT_PATH/bin/indexer -c $ROOT_PATH/etc/sphinx.conf --all --rotate
;;
*)
echo "Usage: $0 {start|stop|restart|reindex}"
exit 1
;;
esac
exit 0
解释:上面用了case语法。可以看到接收start参数进来的时候,执行的是:$ROOT_PATH/bin/searchd -c $ROOT_PATH/etc/sphinx.conf
以后我还需要增加一些 操作项,比如servcie sphinx kill,那么在脚本中继续添加一段接收kill参数的处理代码即可了。写到这里,我更加理解注册成为系统服务管理上的方便之处。
2、注册成系统服务,还有一个好处。可以使用chkconfig命令来控制运行级别。也就是控制什么级别下面是开启还是运行。
chkconfig –level sphinx 3456
这个命令是设置在3、4、5、6运行级别下sphinx服务(也就是/etc/rc.d/init.d/sphinx这个脚本)是启动状态。
我以前就比较纳闷,既然都是使用到/etc/rc.d/init.d/下的脚本文件。这个脚本文件内容完全是自己编写的,里面内容不一定有启动命令啊。如何使得chkconfig就可以开机启动服务了呢?
每个启动级别在/etc/rc.d/下是有一个单独的目录:rc0.d、rc1.d………rc6.d
直到从某个资料中下面介绍:
S开始的文件向脚本传递start参数
K开始的文件向脚本传递stop参数
看到上面的话,顿时理解了。原来,向/etc/rc.d/init.d/sphinx传递start和stop参数来实现了。一句话:chkconfig配置的S85sphinx这些文件实际上就是传递一个参数给脚本文件/ect/rc.d/init.d/sphinx。这样很通俗的明白了。chkconfig来开机启动机制了,在开机的时候,传递参数给脚本文件。
那么现在明白,自己编写的服务脚本,也必须实现接受start和stop两个参数的处理才行。
service与chkconfig的关系归纳为:
先要注册成为系统服务(即service可以调用),然后才能使用chkconfig控制运行级别。
service是chkconfig的前提条件。
linux中注册系统服务—service命令的原理通俗的更多相关文章
- Linux中的系统服务_01
Linux中的系统服务_01 1.linux中所有的内容都是以文件的形式存在,所以其服务也是以文件的形式存在/etc/init.d目中, 2.存在改/etc/init.d/目录里的文件,都可以通过命令 ...
- Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块
Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...
- 浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程【转】
本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linu ...
- Linux中的系统服务_02
Linux中的系统服务_02 1. 在linux增加服务后,如果要实现随着操作系统的启动而启动,需要是用chkconfig命令,加入到系统服务中. 但是对于的脚本的表头,需要增加如下内容 #!/bin ...
- 【日常小记】linux中强大且常用命令:find、grep【转】
转自:http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍fin ...
- Linux 中强大且常用命令:find、grep
在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 f ...
- 【转载】Linux中强大且常用命令:find、grep
转载自:http://www.linuxeden.com/html/softuse/20130804/142065.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find. ...
- linux中强大且常用命令:find、grep
在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们. 本文结构如下: find命令 find命令的一般形 ...
- [转]linux中强大的screen命令
[转]linux中强大的screen命令 http://pythonorg.diandian.com/post/2012-01-05/40027464147 今天用SCREEN用点生了,有几个功能不知 ...
随机推荐
- Lomboz插件
2008年05月20日 星期二 下午 01:47 Lomboz是Eclipse的一个主要的开源插件(open-source plug-in),Lomboz插件能够使Java开发者更好的使用Eclips ...
- 启动mysql报错 -- ERROR! The server quit without updating PID file
开发说某个测试环境的mysql,无法重启了,报以下错误提示: # service mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQ ...
- 实战Apache+Tomcat集群和负载均衡
实战Apache+Tomcat集群和负载均衡 目录 1. 什么是J2EE集群... 3 1.1. 序言... 3 1.2. 基本术语... 3 伸缩性(Scalability): ...
- How to convert String to Date – Java
In this tutorial, we will show you how to convert a String to java.util.Date. Many Java beginners ar ...
- Java 8 – Filter a null value from a Stream
Java 8 – Filter a null value from a Stream package com.mkyong.java8; import java.util.List;import ja ...
- elasticsearch 小试牛刀
- JPA的多表复杂查询
转 JPA的多表复杂查询:详细篇 原文链接: https://mp.weixin.qq.com/s/7J6ANppuiZJccIVN-h0T3Q 2017-11-10 从小爱喝AD钙 最近工作中由于 ...
- python2 与 python3的区别总结
python2 与 python3的区别总结 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的 ...
- Java 打印程序设计实例
3.1 打印文本 3.1.1 应用场景 假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印 54 行,如何实现呢? 3.1.2 解决方法 基本思路如下:首 ...
- Starting with neural network in matlab[zz]
转自:http://matlabbyexamples.blogspot.com/2011/03/starting-with-neural-network-in-matlab.html The neur ...