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 8111

这端代码会启动一个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/

时间: 2025-01-15 04:57:21

initctl 创建自己的JOB的相关文章

18.文件系统——扩展、缩减卷组和逻辑卷以及创建快照卷、移除卷

一.扩展卷组 扩展卷组相对简单,只需要添加一个物理卷即可,使用的命令是vgextend,其格式为: vgextend VG_NAME /PATH/TO/PV 下面来演示一下扩展卷组的过程: 1. 首先准备一块id号位8e的分区,具体过程见前文. [[email protected] ~]# fdisk/dev/sdc WARNING: DOS-compatible mode is deprecated. It's stronglyrecommended to          switch of

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: '127.0.0.1:59770', transport: 'socket'

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

MariaDB(MySQL)创建、删除、选择及数据类型使用详解

一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A

git 把本地创建的项目放到github上

很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到Github上的时候发现自己对于Git的操作是如此之愚钝,所以今天决定把Git好好学习一遍,好让自己以后能更好地使用Github,主要还是通过Git教程 - 廖雪峰的官方网站来学习.简要步骤可以直接看最后的总结. Git的安装就不说了. 第一步:我们需要先创建一个本地的版本库(其实也就是一个文件夹). 你可以直接右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创

自签证书的创建与导入

1.创建根秘钥 openssl genrsa -outca.key 20482.创建根证书 openssl req -new -x509 -days 36500 -sha256 -keyca.key -outopenas.crt -subj "/C=CN/ST=Jiangsu/L=Nanjing/O=HuaweiCA/OU=112.13.167.7"3.创建SSL证书私匙 openssl genrsa -outserver.key 2048位4.建立SSL证书 openssl req

c语言动态链表的创建

创建动态连链表就是将一个个节点连接起来 (1)动态生成节点 (2)输入节点数据 (3)将节点链在一起 例: typedef struct Data { char num[20]; char name[10]; char sex; float english; float chinese; float math; }; typedef struct Node { struct Data data;//结构体类型//结构体嵌套 struct Node* next;//结构体指针型 }node,*Pn

eclipse 创建maven web项目

前言: 前面那一篇讲解了Maven的作用以及详细的应用,不了解Maven的具体使用,请参读:http://www.cnblogs.com/hongwz/p/5456578.html,下面来说明一下IDE构建Maven项目. 1.新建Maven项目 1.1 File -> New -> Other 1.2 选择Maven Project ,单击Next 1.3 保持默认即可,单击Next 1.4 选择Archetype为 web app,单击Next 1.5 输入一些必要信息,单击Finish

通过beego快速创建一个Restful风格API项目及API文档自动化(转)

通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界面. 一.创建数据库及数据表(MySQL) #db--jeedev -- ---------------------------- -- Table structure for `app` -- ---------------------------- DROP TABLE IF EXISTS `a