文档章节

Linux下编写自己的service

摆渡者
 摆渡者
发布于 2015/11/19 19:14
字数 607
阅读 389
收藏 16

今天在Linux下源码安装好MySQL后,将mysql添加到系统的服务的过程引起了我的兴趣,我能不能自己写一个简单的脚本,也添加为系统的服务呢?

于是开干:

su
vi myservice

然后模仿着mysql在里面开写:

#!/bin/bash
 
start() {
    echo 'This is my service, start command'
    echo ''
}
stop() {
    echo 'This is my service, stop command'
    echo ''
}
restart() {
    echo 'This is my service, restart command'
    echo ''
}
status() {
    echo 'This is my service, status command'
    echo ''
}
case "$1" in 
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        echo 'Usage: service myservice {start|status|stop|restart}'
        echo ''
        exit 1
esac
exit 0

很简单,myservice脚本执行时需要接受一个参数,这个参数可以是start, status, stop, restart中间的一个,收到参数后,仅仅做回显使用。写好之后,在拷贝到/etc/init.d/下面去,增加可执行权限,并添加到系统服务:

cp myservice /etc/init.d/myservice
chmod +x /etc/init.d/myservice
chkconfig --add myservice

然后就报错了:

google之,发现是chkconfig的注释不能少:

The script must have 2 lines:

# chkconfig: <levels> <start> <stop>
# description: <some description>

之后再打开/etc/init.d/mysql,看看哪里不对,结果发现里面真有这个注释:

然后自己也跟着写了个这样的注释,于是脚本就变成了:

#!/bin/bash

# For example: following config would generate link
# S51myservice in rc2.d, rc3.d, rc4.d, rc5.d and 
# K49myservice in rc0.d, rc1.d, rc6.d

# Comments to support chkconfig on RedHat Linux
# run level, start order, stop order

# chkconfig: 2345 51 49 
# description: Customized service written by Alvis.
 
start() {
    echo 'This is my service, start command'
    echo ''
}
stop() {
    echo 'This is my service, stop command'
    echo ''
}
restart() {
    echo 'This is my service, restart command'
    echo ''
}
status() {
    echo 'This is my service, status command'
    echo ''
}
case "$1" in 
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        echo 'Usage: service myservice {start|status|stop|restart}'
        echo ''
        exit 1
esac
exit 0

这下好了,再次执行chkconfig:

去看看/etc/rc.d/rc2.d,/etc/rc.d/rc3.d,/etc/rc.d/rc4.d,/etc/rc.d/rc5.d下面都生成了什么:

可以看到,在rc2.d和rc3.d目录下都生成了一个链接S51myservice,S代表在该运行级别启动,51代表该服务的启动优先级。同理可推,在rc0.d、rc1.d和rc6.d这三个文件夹下会生成K49myservice链接:

接下来,可以测试刚刚编写的service 了:

到这里,简单的service就算是编写完成了。真正的service只是包含了更多的逻辑而已,本质上和这个例子没什么区别。


参考:

http://serverfault.com/questions/29788/what-is-needed-for-a-linux-service-to-be-supported-by-chkconfig

© 著作权归作者所有

共有 人打赏支持
摆渡者
粉丝 320
博文 171
码字总数 205876
作品 0
浦东
程序员
macOS 和 Linux 的内核有什么区别

有些人可能会认为 macOS 和 Linux 内核之间存在相似之处,因为它们可以处理类似的命令和类似的软件。有些人甚至认为苹果公司的 macOS 是基于 Linux 的。事实上是,两个内核有着截然不同的历史...

08%
07/20
0
0
嵌入式Linux学习基础规划篇

嵌入式的学习是需要日积月累的,是通过一点一滴的积累才能成为大神。下面来介绍一下嵌入式linux学习基础规划,目标是达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质...

创客学院
04/10
0
0
Tsuru 1.5.3 发布,基于 Docker 的 PaaS 框架

基于 Docker 的 PaaS 框架 Tsuru 1.5.3 发布,更新内容如下: fec92e7 provision/kubernetes: add insecure flag to healthcheck calls 153d4e4 app: create default plan during service i......

达尔文
05/17
0
0
linux下配置tomcat+mysql+eclipse

有一段时间没玩Linux了,因为最近要做android开发,所以决定把服务器搭在Linux上了。 今天主要的工作就是搭建环境:主要包括Tomcat6+MySQL5.0+eclipse。注:以下搭建都是在ubuntu10.10下完成...

一宁
2012/05/16
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

7 个致命的 Linux 命令

导读 如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避...

问题终结者
昨天
0
0
设计模式:工厂方法模式(工厂模式)

工厂方法模式才是真正的工厂模式,前面讲到的静态工厂模式实际上不能说是一种真正意义上的设计模式,只是一种变成习惯。 工厂方法的类图: 这里面涉及到四个种类: 1、抽象产品: Product 2、...

京一
昨天
0
0
区块链和数据库,技术到底有何区别?

关于数据库和区块链,总会有很多的困惑。区块链其实是一种数据库,因为他是数字账本,并且在区块的数据结构上存储信息。数据库中存储信息的结构被称为表格。但是,区块链是数据库,数据库可不...

HiBlock
昨天
0
0
react native 开发碰到的问题

react-navigation v2 问题 问题: static navigationOptions = ({navigation, navigationOptions}) => ({ headerTitle: ( <Text style={{color:"#fff"}}>我的</Text> ), headerRight: ( <View......

罗培海
昨天
0
0
Mac Docker安装流程

久仰Docker大名已久,于是今天趁着有空,尝试了一下Docker 先是从docker的官网上下载下来mac版本的docker安装包,安装很简易,就直接拖图标就好了。 https://www.docker.com/products/docker...

writeademo
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部