initctl 创建自己的JOB
我们的项目需要一个启动一个外部的Jetty server。发现每次kill了这个jetty的进程后,系统会自动启动一个jetty。追查下去发现,原来是在/etc/init.d/jetty 脚本的start 函数里 使用了
initctl start jetty
而我们预想的start函数实现是这样的:
java -jar start.jar
开来古怪就在initctl了。为了说清楚initctl,我们需要先回顾一下历史。
在SystemV这个版本的unix中,系统启动首先是启动init进程。这个进程会按照runlevle启动/etc/rc[0-6].d 目录下的脚本。这里rc后面的数字就是runlevel。举个例子,在图形界面打开以前,runlevel=5;如果系统启动了图形界面,那么runlevel就进入到6.那么/etc/rc6.d里面的脚本就会被一个一个的执行。这些脚本其实都是到/etc/init.d/下的脚本的软链接。
注意上面讲到启动顺序是一个一个的执行,这不可避免的带来串行的时间开销。于是有了System V init 的改进版 “upstart”. initctl 就是upstart提供的一个命令。upstart 的一个优化就是使用的事件驱动,这样启动服务A的时候,不用等待A的结束就可以启动服务B了。在upstart的概念里,我们把服务称作JOB。使用命令
initctl start JOB
启动的JOB以init进程为父进程。当JOB的进程被杀死后,init进程会自动重新启动JOB。这就是 initctl start JOB 和 service JOB start 的主要区别吧。
那么如何创建一个自己的JOB呢?
需要在/etc/init/目录下创建一个.conf 文件。比如说我们的JOB叫 mywork。那么需要创建文件/etc/init/mywork.conf
下面给一个mywork.conf的例子:
exec python -m SimpleHTTPServer
这端代码会启动一个http server监听 8111 端口。
建立了文件后,可以运行命令 initctl start mywork, 这样8111端口就被监听了。可以试试 curl localhost:8111,你会收到一段SimpleHTTPServer提供的默认HTML。你也可以尝试这杀掉监听8111端口的进程,不过很快脚本mywork.conf就会重新启动监听8111端口。
怎么写mywork.conf 呢? 可以参考一下:http://www.mike.org.cn/articles/understand-upstart/
initctl 创建自己的JOB的更多相关文章
- LVM卷的创建及案例演示
LVM:Logical Volume Manager, Version:2dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块. /dev/dm-# 这里的#表示数字,代 ...
- 创建基于 AFS 的 Docker 容器卷
标准的 Docker 容器卷一般是位于 Docker 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...
- Docker之使用Dockerfile创建定制化镜像(四)
Dockerfile简介 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么哪些无法重复的问题.镜像构建 ...
- In-Memory:在内存中创建临时表和表变量
在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...
- 创建 OVS flat network - 每天5分钟玩转 OpenStack(134)
上一节完成了 flat 的配置工作,今天创建 OVS flat network.Admin -> Networks,点击 "Create Network" 按钮. 显示创建页 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ABP入门系列(2)——通过模板创建MAP版本项目
一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...
- 记一次tomcat线程创建异常调优:unable to create new native thread
测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...
- 在WPF中使用依赖注入的方式创建视图
在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...
随机推荐
- Zooming
Zooming 是一款纯 javascript 图片缩放库,主要特点有: 不依赖其他库,纯 JavaScript 实现,支持移动设备: 流畅的动画: 可缩放高清图像: 易于集成和定制. 使用方法 1. ...
- python 读取二进制数据到可变缓冲区中
想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...
- python recv()是什么
socket有个recv方法,recv有一个参数,指定数据缓冲区的大小 但是现在的问题就是不知道将要接受的数据的大小到底是多少,可能只有几个字节,可能会有几M,google了一下socket的入门文章 ...
- shell 命令总结
删除0字节文件 find . -type f -size 0 -exec rm -rf {} \; find . type f -size 0 -delete 查看进程,按内存从大到小排列 ps -e ...
- python之路----进程(一)
一.理论知识1.操作系统发展简介 1.没有操作系统 —— 穿孔卡片 2.批处理系统 —— 串行 ,速度块 联机批处理 读磁带的时候速度快 脱机批处理 读磁带和cpu工作并发 3.多道程序系统 —— 并 ...
- Unity 使用C/C++ 跨平台终极解决方案(PC,iOS,Android,以及支持C/C++的平台)
https://blog.csdn.net/fg5823820/article/details/47865741 PC的其实根本不用说,毕竟C#和C++交互的文章已经够多了,当然我自认为经过几次折腾后 ...
- c++第十一天
<c++ primer, 5E> 第68页到第81页,笔记: 1.读取未知量的string对象示例 #include<iostream> using std::cin; usi ...
- Python入门之Pycharm开发中最常用快捷键
要查阅Pycharm的快捷键,当然要看官方文档,https://www.jetbrains.com/help/pycharm/mastering-keyboard-shortcuts.html 编辑类 ...
- Python Web学习笔记之TCP、UDP、ICMP、IGMP的解释和区别
TCP与UDP解释 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据, ...
- nginx/ajax跨子域请求的两种现代方法以及403解决
因为面向互联网的性质,我们公司的大部分系统都采用多子域的方式进行开发和部署,以达到松耦合和分布式的目的,因此子系统间的交互不可避免.虽然通过后台的rpc框架解决了大部分的交互问题,但有些情况下,前端直 ...