Linux配置启动项,自启动服务

--2014-02-15 更新:

看到新闻说ubuntu将切换到systemd。。

http://www.cnbeta.com/articles/272538.htm

Linux下有两种机制,一个是旧式的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart机制。

参考:http://www.cnblogs.com/cassvin/archive/2011/12/25/ubuntu_init_analysis.html

这个也可以说是Linux的蛋疼的地方了,启动的方式也有两套,而且有的软件用的是System V initialization机制,有的用的是Upstart机制。不同发行版采用的机制也不同,连配置工具也不同。。如apache用的是前者,mysql, mongodb用的是后者。

System V initialization机制

参考:http://zh.wikipedia.org/wiki/Init

不同操作系统默认的运行模式

操作系统 默认的运行模式
AIX 2
Arch Linux 3
CentOS 3
Debian GNU/Linux [5]
Gentoo Linux 3
Mandriva Linux 5
Mac OS X 3
Red Hat Linux / Fedora
Core
3 or 5
Slackware Linux 3
Solaris [6]
SUSE Linux [7]
Ubuntu
(Server and Desktop)
[8]

System V initialization机制蛋疼的是对于每一个运行模式,都有一个文件夹来存放启动时要用的脚本。在/etc目录下可以看到有rc0.d, rc1.d ... rc5.d, rcS.d等文件夹,而里面的内容,大部分是从/etc/init.d里软链接过去的。。所以,如果想要增加一个启动项,得先在/etc/init.d下增加自己的脚本,再在rc0.d等目录里创建软链接,非常的麻烦。

所以Linux的发行版通常都 会有工具来自动生成这些软链接配置。

System V initialization机制还有一个蛋疼的地方,它用序号的方式来表示启动,停止顺序。比如在/etc/rc0.d里可以看到都是以S或者K开头的脚本,S是start,K是kill的意思。S/K后面的数字表示顺序,启动时,从小到大,停止时,从大到小。比如:K09apache2,表示apache2这个服务会是在09这个顺序停止。

CentOS下配置启动项

CentOS用的是System V initialization机制。

CentOS下用的工具是chkconfig

Ubuntu兼容System V initialization和Upstart机制。

Ubuntu下对于System V initialization机制,用的工具是update-rc.d,

对于Upstart机制,要手动修改配置,不过有个initctl的工具可以用来启动/停止/查看相关的进程。

对于CentOS,配置一个启动服务还是比较简单的,比如配置zookeeper服务自动启动:

在/etc/init.d下创建一个脚本:

#/bin/sh
#chkconfig: 2345 20 80
# description:  zookeeper1
case $1 in
          start)  /home/zookeeper/zookeeper345_1/bin/zkServer.sh start   ;;
          stop)  /home/zookeeper/zookeeper345_1/bin/zkServer.sh stop;;
          status)  /home/zookeeper/zookeeper345_1/bin/zkServer.sh status;;
          restart)  /home/zookeeper/zookeeper345_1/bin/zkServer.sh restart;;
              *)  echo "require start|stop|status|restart"  ;;
esac

这个脚本很简单,就是判断第一个参数的内容,再执行对应的程序。

要注意的是chkconfig的两行配置一定要有:

#chkconfig: 2345 20 80
#description:  zookeeper1

#chkconfig后面的2345表示系统启动的模式(runlevel),20表示启动的顺序,80表示停止的顺序。

再加上可执行权限:

chmod +x /etc/init.d/zookeeper1
chkconfig --add zookeeper1

取消启动项:

chkconfig zookeeper off

删除启动项:

chkconfig --del zookeeper1

Ubuntu下配置启动项

System V initialization机制

对于Ubuntu,如果是使用System V initialization机制,则可以参照上面chkconfig的脚本,再用update-rc.d命令设置一下:

update-rc.d zookeeper1 defaults

取消启动项:

update-rc.d zookeeper1 disable

删除启动项:

update-rc.d -f zookeeper1 remove

Upstart机制

Upstart机制相当的复杂,具体可以参考:http://upstart.ubuntu.com/cookbook,这里只列一些要点。

如果使用的是Upstart机制,则可以直接在/etc/init目录下创建一个以".conf"结尾的脚本,如,zookeeper1.conf:

#设置启动停止的runlevel
start on runlevel [2345]
stop on runlevel [!2345]

#设置自动重启
respawn
respawn limit 2 5

umask 007

kill timeout 30

#设置启动的用户
setuid zookeeper
setgid zookeeper

#注意使用的是start-foreground参数,这样会zookeeper进程会在前台运行,这样upstart才可以控制这个进程
script
exec  /home/hengyunabc/soft/zookeeper-3.4.5/bin/zkServer.sh start-foreground
end script

注意,这样子启动的话,zookeeper的日志是写到了/var/log/upstart/zookeeper1.log里去了。

如果想用zkServer.sh start参数来启动的话,则比较麻烦,因为upstart不能关联到java进程,只能关联到bash进程。尽管upstart有一些expect daemon,expect fork的参数,但是貌似都不合适。

可以参考这个帖子:http://stackoverflow.com/questions/12200217/can-upstart-expect-respawn-be-used-on-processes-that-fork-more-than-twice

里面提到了一种定时检测进程进程存活,如果不存活,则启动的办法。可以用这个办法来处理脚本调用的情况。

或者,直接在upstart脚本里启动java进程,可以参考upstart文档,或者这里:

http://zookeeper-user.578899.n2.nabble.com/Zookeeper-run-as-non-root-td7577797.html 

总结

和System V initialization机制对比,Upstart机制虽然功能强大,比如可以自定义各种事件的触发处理,但是遇到复杂情况也不容易配置好。

Upstart的status只能判断进程是否存活(而且不一定准确),而System V initialization则可以灵活地调用自己的脚本来得到进程更详细的状态信息。

其它的一些东东:

supervisor,python写的进程管理工具:http://supervisord.org/

参考

http://www.debian.org/doc/manuals/debian-reference/ch03.en.html

https://github.com/LucidWorks/solr-fabric/blob/master/templates/zookeeper-upstart.conf

时间: 2024-07-28 18:20:49

Linux配置启动项,自启动服务的相关文章

Linux配置svn以及svn服务配置方法

编译模式安装svn方法 1. 采用源文件编译安装.源文件共两个,为: subversion-1.6.1.tar.gz  (subversion 源文件) subversion-deps-1.6.1.tar.gz  (subversion依赖文件) 注意文件版本必须一致,否则很容易产生各种奇怪的问题. 2. 上传以上两个文件到服务器上,解压.解压命令为:   tar xfvz subversion-1.6.1.tar.gz tar xfvz subversion-deps-1.6.1.tar.gz

linux添加开机启动项

使用chkconfig命令可以查看在不同启动级别下课自动启动的服务(或是程序),命令格式如下: chkconfig --list 可能输出如下: openvpn 0:关闭 1:开启 ...... 6:关闭 (0-6 为启动级别 ; 关闭/开启为相应级别下该服务的自动启动选项) 如果希望对自动启动选项做出改变,命令格式为: chkconfig --level x name on/off z.B. chkconfig --level 5 openvpn off 以上的命令可以查询系统可提供的服务,如

linux添加开机启动项的方法介绍

  使用chkconfig命令可以查看在不同启动级别下课自动启动的服务(或是程序),命令格式如下: chkconfig --list 可能输出如下: openvpn 0:关闭 1:开启 ...... 6:关闭 (0-6 为启动级别 ; 关闭/开启为相应级别下该服务的自动启动选项) 如果希望对自动启动选项做出改变,命令格式为: chkconfig --level x name on/off z.B. chkconfig --level 5 openvpn off 以上的命令可以查询系统可提供的服务

如何配置Linux 11G R2 RAC NTP服务

安装Oracle 11g RAC时,我们需要配置ntp服务.在使用虚拟机的情况下对于时钟同步方式的配置有很多种方式,可以使用vmware自带的时钟同步功能,也可以直接将本地的一个节点用作时间服务器.本文介绍直接配置ntp方式的时钟服务器. 1.查看两节点的hosts配置 [root@node1 ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network func

Linux基于heartbeat配置httpd高可用服务

Heartbeat是一个基于Linux开源的,被广泛使用的高可用集群系统.我们可以基于Heartbeat构建web高可用服务环境.本文在CentOS 6.5下做了一个简单示例,并对其日志进行了初步分析,供大家参考. 有关Heartbeat的相关知识,可以参考: Heartbeat 集群组件概述 Heartbeat 安装及配置 一.配置host解析及网络 ###主机名配置,与/etc/hosts中的解析两者配置保持一致 [root@orasrv1 ~]# more /etc/sysconfig/n

linux开机启动服务和chkconfig使用方法(转)

  每个被chkconfig 管理的服务需要在对应的/etc/rc.d/init.d 下的脚本加上两行或者更多行的注释. 第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级.如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级. 第二行对服务进行描述,可以用\ 跨行注释. 例如,random.init 包含三行: # chkconfig: 2345 20 80 # description: Saves and restores system entropy pool f

WCF服务主机能作为启动项吗

问题描述 通过windows服务发布WCF服务之后,如果要在网页中调用WCF服务,就必须要开启WCF服务主机,不然就无法正常实现功能.注:通过调试等方法开启服务主机后,功能是可以实现的 解决方案 解决方案二:没看懂问题是什么意思...解决方案三:启动项,那个东西是桌面程序(用户登陆后才会启动)WCF寄宿在windows服务中,配置为自动开启,只要一开机,就会随系统自动(即使没有任何用户登陆)这对于部署在服务器上是很有必要的

电脑提示:无线网卡无法上网:启动windows零配置(WZC)服务

问题如下:     用智能手机检测有wifi信号,但笔记本查找不到无线网络,显示windows无法配置此无线连接,如果您已经启用其它程序管理此无线连接,请使用该软件.如果您要windows配置此无线网络,请启动windows零配置(WZC)服务. 出现以上情况,首先检查看在windowssystem32目录下是否有wzcsvc.dll文件,如果没有从其他电脑上拷贝一份. 启动windows零配置(WZC)服务方法:      方法一:        先进入控制面版,然后找到"管理工具"

如何对win7旗舰版中的windows服务启动项顺序进行设置?

  虽然一再的对win7 64位旗舰版下载 iso的windows服务启动项进行精简,但是说来说去,因为很多服务启动项都是涉及到系统的,还是没办法禁用掉,但是大家是否知道,其实这些启动项是可以根据咱们的需求来对他们的启动顺序进行设置的,似乎现实生活中鲜少有用户会使用到这个功能,也许是鲜少有用户知道了解这个功能.那么今天小编就来讲解一下,如何在win7旗舰版中对win7旗舰版中的windows服务启动项顺序进行设置吧! 1.首先,咱们同时按下win7旗舰版键盘上的win+R快捷键打开电脑的运行窗口