在项目中我们经常需要做的是,把我们写的应用封装成系统服务,那么它就会像一个守护程序一样,被操作系统所管理。目前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(默认设置)
output:直接输出到当前标准输出
owner:进程成为控制台的所有者,这意味着它可以接收来自键盘的信号
none:输出被重定向到/dev/null

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相关推荐

  1. linux upstart脚本,Ubuntu的初始化系统工具Upstart

    一.简介 UpStart 基于事件机制,采用事件驱动机制也带来了一些其它有益的变化,比如加快了系统启动时间.采用这种事件驱动的模式,upstart 完美地解决了即插即用设备带来的新问题. Ubuntu ...

  2. linux+读取初始化文件,Linux 初始化系统 SystemV Upstart

    System V 特点 缺点: 启动时间长,init是串行启动,只有前一个进程启动完,才会启动下一个进程 启动脚本复杂,init只是执行启动脚本,不管其他事情,脚本需要自己处理各种情况,这往往使得脚本 ...

  3. 浅析 Linux 初始化系统(系统服务管理和控制程序/init system) -- UpStart

    文章目录 一.Upstart 简介 (一)开发 Upstart 的缘由 (二)Upstart 的特点 二.Upstart 概念和术语 (一)Job (二)Job 生命周期 (三)事件 Event 1. ...

  4. 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- systemd

    文章目录 一.Systemd 的简介和特点 (一)同 SysVinit 和 LSB init scripts 兼容 (二)更快的启动速度 (三)systemd 提供按需启动能力 (四)Systemd ...

  5. 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- sysvinit/systemvinit(System V init)

    文章目录 从 sysvinit 到 systemd 什么是 init 系统,init 系统的历史和现状 sysvinit 概况 运行级别 sysvinit 运行顺序 sysvinit 和系统关闭 sy ...

  6. linux载入初始化内存盘,Linux初始化系统盘后重新挂载数据盘方法

    Linux实例初始化系统盘后重新挂载数据盘 在Linux实例中,重新初始化系统盘不会改变数据盘里的内容,但是数据盘的挂载信息会丢失,所以,在Linux重启后,按以下步骤创建新的挂载点信息并挂载数据盘分 ...

  7. Linux 初始化系统(系统服务管理和控制程序/Init System) -- System V init(SysV init) 的简单理解

    文章目录 SysV init 简介 SysV init 的缺点 运行级别 主要文件和目录的截图 SysV init 简介 System V init(缩写 SysV init)是类 Unix 操作系统 ...

  8. 浅析 Linux 初始化 init 系统: UpStart

    浅析 Linux 初始化 init 系统: UpStart Upstart 简介 假如您使用的 Linux 发行版是 Ubuntu,很可能会发现在您的计算机上找不到/etc/inittab 文件了,这 ...

  9. 第二部分:浅析 Linux 初始化 init 系统:upstart

    Upstart 简介 假如您使用的 Linux 发行版是 Ubuntu,很可能会发现在您的计算机上找不到/etc/inittab 文件了,这是因为 Ubuntu 使用了一种被称为 upstart 的新 ...

最新文章

  1. Mac 从Makefile 编译 Rocksdb 源码的一些注意事项
  2. ajax 与php页面取值,在同一页面中使用PHP和AJAX的最佳方法
  3. 一个可以实现图片格式相互转化的工具convert_picture.exe
  4. 最大元最小元上确界_托盘天平最大秤量和最小秤量
  5. Python_装饰器Decorator
  6. BZOJ1768 : [Ceoi2009]logs
  7. Mysql 基础操作:DDL、DML、CRUD 与 常用命令
  8. 【答题卡识别】基于matlab GUI hough变换答题卡成绩统计(带面板)【含Matlab源码 1828期】
  9. ubuntu下Qt cannot find -lGL错误的解决方法
  10. 搜索摄像头/录像机IP地址工具是什么
  11. vs中css样式转换_在现实世界中使用CSS转换
  12. 最新资料!工银亚洲开户见证业务受理网点(深圳地区)
  13. 计算机必备ASCII码表
  14. 没事干的时候可以看这些,超全超多…
  15. Flutter Checkbox 复选框
  16. 如何清洁你脏兮兮的笔记本电脑?
  17. Stata:VAR-中的脉冲响应分析-(IRF)
  18. 计算机三级数据库技术 第6章 数据库及数据库对象
  19. Android——Fragment懒加载
  20. 串口连接线的制作方法 com线制作

热门文章

  1. 淘宝用户行为分析项目
  2. [文章摘要]Constructing Semantic Interpretation of Routine and Anomalous Mobility Behaviors from Big Data
  3. Android监控屏幕解锁和点亮
  4. 银联8583报文域小结
  5. 跑跑卡丁车手游测试开启:PK腾讯同款QQ飞车谁能赢?
  6. 挑战蓝龙Kalecgos
  7. 4G DTU连接阿里云
  8. [导入]IT人,你有农民兄弟活得潇洒吗[转]
  9. 使用java编写snmp inform 发送与接收示例
  10. 关于lg(n!)的渐进紧确界