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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: --2014-02-15 更新:看到新闻说ubuntu将切换到systemd。。http://www.cnbeta.com/articles/272538.htmLinux下有两种机制,一个是旧式的System V initialization,它来源于Unix并且至今仍被各种Linux distros所采用;另一种是近几年提出的Upstart机制。

--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




相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
44 5
linux系统服务二!
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
44 3
linux系统服务!!!
|
26天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
58 9
|
27天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
38 5
|
1月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
200 3
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
94 3
|
2月前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
59 2
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
384 3
|
2月前
|
监控 安全 网络协议
快速配置Linux云服务器
【10月更文挑战第3天】快速配置Linux云服务器
|
2月前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
28 2