发布时间:2014-09-05 13:27:58作者:知识屋
参考:http://www.cnblogs.com/cassvin/archive/2011/12/25/ubuntu_init_analysis.html
这个也可以说是Linux的蛋疼的地方了,启动的方式也有两套,而且有的软件用的是System V initialization机制,有的用的是Upstart机制。不同发行版采用的机制也不同,连配置工具也不同。。如apache用的是前者,mysql, mongodb用的是后者。
参考:http://zh.wikipedia.org/wiki/Init
不同操作系统默认的运行模式
操作系统 | 默认的运行模式 |
---|---|
AIX | 2 |
Arch Linux | 3 |
CentOS | 3 |
Debian GNU/Linux | 2 [5] |
Gentoo Linux | 3 |
Mandriva Linux | 5 |
Mac OS X | 3 |
Red Hat Linux / Fedora Core | 3 or 5 |
Slackware Linux | 3 |
Solaris | 3 [6] |
SUSE Linux | 5 [7] |
Ubuntu (Server and Desktop) | 2 [8] |
所以Linux的发行版通常都 会有工具来自动生成这些软链接配置。
System V initialization机制还有一个蛋疼的地方,它用序号的方式来表示启动,停止顺序。比如在/etc/rc0.d里可以看到都是以S或者K开头的脚本,S是start,K是kill的意思。S/K后面的数字表示顺序,启动时,从小到大,停止时,从大到小。比如:K09apache2,表示apache2这个服务会是在09这个顺序停止。
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: zookeeper1case $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/zookeeper1chkconfig --add zookeeper1
取消启动项:
chkconfig zookeeper off
删除启动项:
chkconfig --del zookeeper1
对于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机制相当的复杂,具体可以参考:http://upstart.ubuntu.com/cookbook,这里只列一些要点。
如果使用的是Upstart机制,则可以直接在/etc/init目录下创建一个以".conf"结尾的脚本,如,zookeeper1.conf:
#设置启动停止的runlevelstart on runlevel [2345]stop on runlevel [!2345]#设置自动重启respawnrespawn limit 2 5umask 007kill timeout 30#设置启动的用户setuid zookeepersetgid zookeeper#注意使用的是start-foreground参数,这样会zookeeper进程会在前台运行,这样upstart才可以控制这个进程scriptexec /home/hengyunabc/soft/zookeeper-3.4.5/bin/zkServer.sh start-foregroundend 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
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能