能够使用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理解的更多相关文章

  1. linux service命令解析(重要)

    我们平时都会用service xxx start来启动某个进程,那么它背后究竟执行了什么? 其实service的绝对路径为/sbin/service ,打开这个文件cat /sbin/service, ...

  2. [Linux]系统调用理解(3)

    本文介绍了Linux下的进程的一些概念,并着重讲解了与Linux进程管理相关的重要系统调用wait,waitpid和exec函数族,辅助一些例程说明了它们的特点和使用方法. 1.7 背景 在前面的文章 ...

  3. [Linux]系统调用理解(2)

    本文介绍了Linux下的进程概念,并着重讲解了与Linux进程管理相关的4个重要系统调用getpid,fork,exit和_exit,辅助一些例程说明了它们的特点和使用方法. 关于进程的一些必要知识 ...

  4. linux service

    有些东西真是难得搞懂,一旦懂了就容易记住了. 说到service 就不能不说 daemon, 他们两者看起来不相关.其实是紧密相连的两个概念. —— 就像两个同心的正五边形和正六边形放在一起时候的样子 ...

  5. linux service命令常见使用方法

    service命令,顾名思义,就是用于管理Linux操作系统中服务的命令. 1. 声明:这个命令不是在所有的linux发行版本中都有.主要是在redhat.fedora.mandriva和centos ...

  6. 轻松学习Linux之理解Shell的硬链接与软连接

     大家在学习linux的过程中常常遇到一些模糊且容易混淆的概念比如什么是硬链接和软链接,他们有什么区别?  软连接有点象windows中的快捷方式,连接和目标文件具有相同的节点,而硬连接就好象重新复制 ...

  7. 【Linux】理解setuid()、setgid()和sticky位

    详见: http://blog.csdn.net/m13666368773/article/details/7615125 Linux SETUID机制 (1)进程运行时能够访问哪些资源或文件,不取决 ...

  8. linux service 简单易懂贴

    service用于管理Linux操作系统中服务的命令 1.不是在所有linux发行版本中都有.主要是在redhat.fedora.mandriva和centos中. 2. 命令位于/sbin目录下,用 ...

  9. linux 系统进程理解

    1.为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行.      不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样 ...

随机推荐

  1. 1T文件夹 - 微云

    1T文件夹 - 微云 1T文件夹

  2. 探索Oracle之数据库升级七 11gR2 to 12c 升级完毕后插入PDB

    探索Oracle之数据库升级七 11gR2 to 12c 升级完毕后插入PDB 前言:        从Oracle 12c開始,引入了容器数据库的概念,能够实现数据库插拔操作,例如以下图: 如今我们 ...

  3. Git使用之搭建基于SSH的Gitserver(上篇)

    1. 须要软件 msysgit (Gitfor Windows) Copssh (OpenSSHfor Windows,新版本号已经開始收费了大家能够去搜索引擎找曾经的免费版Copssh_4.1.0下 ...

  4. 经常使用Firefox插件大全

    Web开发者经常使用的火狐插件 1)FireShot:是一个截图工具,来源于截图软件Screenshot Studio的开发商,是一个Firefox扩展或者说是Firefox版的Screenshot ...

  5. OSG+VS2010+win7环境搭建

    Win7下 osg+vs2010环境搭建 一.相关准备 a) Osg源代码 当前最新版:OpenSceneGraph的3.0.0.zip 下载链接: http://www.openscenegraph ...

  6. redis做RDB时请求超时case

        近期在排查redis做rdb时会有部分请求超时的case.初步推断是我们redisserver上开启了THP(Transparent Huge Pages).      1) Linux本身的 ...

  7. SE 2014年4月17日

    描述BGP路由属性 MED.首选值 的特点 MED相当于IGP协议中的度量值,在其他条件相同时,当本自治系统有多条到达外部自治系统的链路时,MED值小的路由优选.MED属性只能在两个自治系统间传递. ...

  8. 低版本的 opencv库的 vs2010 打开 高版本opencv

    打开track.vcxproj文件, 注释掉跟版本有关的行就可. 本例子中,当用双击.sln用vs2010打开高版本的opencv项目时,会出现错误, 并且会有错误信息提示,双击该错误信息,就会打开该 ...

  9. BC 2015在百度之星程序设计大赛 - 预赛(1)(KPI-树董事长)

    KPI Accepts: 517 Submissions: 2185 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...

  10. Android应用开发-小巫CSDN博客clientJsoup篇

    Android应用开发-小巫CSDN博客clientJsoup篇 距上一篇博客已经过去了两个星期,小巫也认为很抱歉,由于在忙着做另外一个项目,差点儿抽不出空来,这不小巫会把剩下的博文全部在国庆补上.本 ...