linux初始化系统工具Upstart
在项目中我们经常需要做的是,把我们写的应用封装成系统服务,那么它就会像一个守护程序一样,被操作系统所管理。目前linux有3种初始化系统,按出现的时间依次为init ,upstart和systemd。
3种系统简介
1. init
init即sysvinit,它是system v的成果,被推广到其他unix系统。常见的init 命令和/etc/init.d即属于它。
init的优点来自服务串行启动,可以保证脚本执行顺序,也方便调试和排错。但也因为串行启动导致系统启动时间很长,在linux被应用到移动端后这个缺点成了大问题。
2. upstart
upstart通过并行启动加快执行速度,但对于相互依赖的服务采用并发启动。它也支持硬件热插拔时的动态启动和卸载。
3.Systemd
systemd的并发更激进,因为对于相互依赖的服务它也同时启动。而且它的按需启动比upstart更优秀。
upstart取代了曾经辉煌的init,而systemd将要取代upstart
问题:
如何判断某个linux系统采用了哪种初始化系统?
初始化进程是kernel启动的第一个进程,其pid始终为1,因此我们可以使用stat /proc/1/exe可以查看:
#stat /proc/1/exeFile: `/proc/1/exe' -> `/sbin/init'Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Device: 3h/3d Inode: 2608287784 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-12-26 15:57:12.206286001 +0800
Modify: 2019-12-25 15:56:57.194347686 +0800
Change: 2019-12-25 15:56:57.194347686 +0800
或者根据/usr/lib/systemd /usr/share/upstart /etc/init.d这3个目录是否存在来判断。但是由于systemd和upstart都向后兼容,因此一个系统中可能安装了多个初始化系统。
UpStart
UpStart 基于事件机制,采用事件驱动机制也带来了一些其它有益的变化,比如加快了系统启动时间。采用这种事件驱动的模式,upstart 完美地解决了即插即用设备带来的新问题。
upstart两个核心点:事件(events),任务(jobs)。对于每个任务需要有一个配置文件,存放在/etc/init/目录下面。
~ vi /etc/init/mytest.conf
完成任务配置文件后,可以直接用initctl, start, stop 命令对任务进行启动,停止,查看状态 等的操作。
start mytest.conf
更多内容可参考Upstart Cookbook
配置
在/etc/init/目录下面,存放着各种各样的.conf文件,这些文件就是需要启动的服务进程的文件。系统会按照这些文件的内容,执行相应的内容。
一个conf文件的配置可能如下:
webapi_test.conf
description "webapi_test"#设置资源限制
limit nofile 65535 65535env JVM_CONFIG="-server -Xmx512m -Xms512m -Xmn256m -XX:SurvivorRatio=3 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/heapdump.log -Xloggc:/usr/local/webapi_test/log/gc.log"export JVM_CONFIGenv ROOT_DIR=/usr/local/webapi_test
export ROOT_DIR
env JAR_PACKAGE="webapi_test.jar"
export JAR_PACKAGEstart on started rc
stop on shutdownrespawn
# Respawning is subject to a limit. If the job is respawned more than COUNT times in INTERVAL seconds, it will be considered to be having deeper problems and will be stopped. Default COUNT is 10. Default INTERVAL is 5 seconds.
respawn limit 2 60console outputpre-start scriptlogger "pre-start begin: webapi_test"logger "pre-start end: webapi_test"
end scriptpost-start scriptlogger "post-start begin: webapi_test"logger "post-start end: webapi_test"
end scriptscriptlogger "start begin: webapi_test"cd $ROOT_DIRmkdir -p $ROOT_DIR/logjava $JVM_CONFIG -jar $JAR_PACKAGE >> $ROOT_DIR/log/webapi_test.log 2>&1logger "start end: webapi_test"
end scriptpost-stop scriptlogger "post-stop begin: webapi_test"logger "post-stop end: webapi_test"
end script
conf文件的语法可以参考:http://upstart.ubuntu.com/wiki/Stanzas
总结:
关键字 | 用法 | 语法 | 示例 |
---|---|---|---|
limit |
为job流程设置资源限制。软限制和硬限制都需要。资源可以是:core cpu data fsize memlock msgqueue nice nofile nproc rss rtprio sigpending stack |
limit resource <unlimited|soft> <unlimited|hard> | limit nofile 65535 65535 |
env | 设置环境变量 | env name=value | env PIDFILE=/var/run/myprocess.pid |
start on | 设置什么时候start | start on event-name [args...] | start on startup |
stop on | 设置什么时候stop | stop on event-name [args...] | stop on shutdown |
respawn | 为任务重启标志。重启标志意味着进程如果意外结束,将重新启动。 | respawn | respawn |
respawn limit | 重启是有限制的。如果该job在间隔秒内被重新执行的次数超过计数次数,那么它将被认为存在更深层次的问题,并将被停止。默认计数为10。默认间隔为5秒。该配置只有在重启标志(即上面的respawn)被设置的时候才有效。 | limit count timeout | respawn limit 15 5 |
console |
设置console的输出。有四个选择:logged|output|owner|none logged:重定向到logger(默认设置) |
console <logged|output|owner|none> | console owner |
pre-start | 指定在实际运行进程之前执行的命令 | pre-start command |
示例1:pre-start exec rm -f /usr/test.log 示例2: pre-start scriptrm -f /usr/share/hal/fdi/policy/gparted-disable-automount.fdi end script |
script | 运行任务进程的具体命令 |
script some shell scripting end script |
script . /etc/default/hal exec /usr/sbin/hald --daemon=no $DAEMON_OPTS end script |
post-stop | 主进程退出后,job停止时执行的命令。如果job无法启动主进程或启动前命令失败,则执行该命令。 | post-stop command |
post-stop script logger "service stop" end script |
使用
启动服务:start webapi_test
查看服务状态: status webapi_test
停止服务:stop webapi_test
参考文档:
upstart把应用封装成系统服务
Ubuntu的初始化系统工具Upstart
linux初始化系统工具Upstart相关推荐
- linux upstart脚本,Ubuntu的初始化系统工具Upstart
一.简介 UpStart 基于事件机制,采用事件驱动机制也带来了一些其它有益的变化,比如加快了系统启动时间.采用这种事件驱动的模式,upstart 完美地解决了即插即用设备带来的新问题. Ubuntu ...
- linux+读取初始化文件,Linux 初始化系统 SystemV Upstart
System V 特点 缺点: 启动时间长,init是串行启动,只有前一个进程启动完,才会启动下一个进程 启动脚本复杂,init只是执行启动脚本,不管其他事情,脚本需要自己处理各种情况,这往往使得脚本 ...
- 浅析 Linux 初始化系统(系统服务管理和控制程序/init system) -- UpStart
文章目录 一.Upstart 简介 (一)开发 Upstart 的缘由 (二)Upstart 的特点 二.Upstart 概念和术语 (一)Job (二)Job 生命周期 (三)事件 Event 1. ...
- 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- systemd
文章目录 一.Systemd 的简介和特点 (一)同 SysVinit 和 LSB init scripts 兼容 (二)更快的启动速度 (三)systemd 提供按需启动能力 (四)Systemd ...
- 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- sysvinit/systemvinit(System V init)
文章目录 从 sysvinit 到 systemd 什么是 init 系统,init 系统的历史和现状 sysvinit 概况 运行级别 sysvinit 运行顺序 sysvinit 和系统关闭 sy ...
- linux载入初始化内存盘,Linux初始化系统盘后重新挂载数据盘方法
Linux实例初始化系统盘后重新挂载数据盘 在Linux实例中,重新初始化系统盘不会改变数据盘里的内容,但是数据盘的挂载信息会丢失,所以,在Linux重启后,按以下步骤创建新的挂载点信息并挂载数据盘分 ...
- Linux 初始化系统(系统服务管理和控制程序/Init System) -- System V init(SysV init) 的简单理解
文章目录 SysV init 简介 SysV init 的缺点 运行级别 主要文件和目录的截图 SysV init 简介 System V init(缩写 SysV init)是类 Unix 操作系统 ...
- 浅析 Linux 初始化 init 系统: UpStart
浅析 Linux 初始化 init 系统: UpStart Upstart 简介 假如您使用的 Linux 发行版是 Ubuntu,很可能会发现在您的计算机上找不到/etc/inittab 文件了,这 ...
- 第二部分:浅析 Linux 初始化 init 系统:upstart
Upstart 简介 假如您使用的 Linux 发行版是 Ubuntu,很可能会发现在您的计算机上找不到/etc/inittab 文件了,这是因为 Ubuntu 使用了一种被称为 upstart 的新 ...
最新文章
- Mac 从Makefile 编译 Rocksdb 源码的一些注意事项
- ajax 与php页面取值,在同一页面中使用PHP和AJAX的最佳方法
- 一个可以实现图片格式相互转化的工具convert_picture.exe
- 最大元最小元上确界_托盘天平最大秤量和最小秤量
- Python_装饰器Decorator
- BZOJ1768 : [Ceoi2009]logs
- Mysql 基础操作:DDL、DML、CRUD 与 常用命令
- 【答题卡识别】基于matlab GUI hough变换答题卡成绩统计(带面板)【含Matlab源码 1828期】
- ubuntu下Qt cannot find -lGL错误的解决方法
- 搜索摄像头/录像机IP地址工具是什么
- vs中css样式转换_在现实世界中使用CSS转换
- 最新资料!工银亚洲开户见证业务受理网点(深圳地区)
- 计算机必备ASCII码表
- 没事干的时候可以看这些,超全超多…
- Flutter Checkbox 复选框
- 如何清洁你脏兮兮的笔记本电脑?
- Stata:VAR-中的脉冲响应分析-(IRF)
- 计算机三级数据库技术 第6章 数据库及数据库对象
- Android——Fragment懒加载
- 串口连接线的制作方法 com线制作
热门文章
- 淘宝用户行为分析项目
- [文章摘要]Constructing Semantic Interpretation of Routine and Anomalous Mobility Behaviors from Big Data
- Android监控屏幕解锁和点亮
- 银联8583报文域小结
- 跑跑卡丁车手游测试开启:PK腾讯同款QQ飞车谁能赢?
- 挑战蓝龙Kalecgos
- 4G DTU连接阿里云
- [导入]IT人,你有农民兄弟活得潇洒吗[转]
- 使用java编写snmp inform 发送与接收示例
- 关于lg(n!)的渐进紧确界