文档章节

Linux下编写自己的service

摆渡者
 摆渡者
发布于 2015/11/19 19:14
字数 607
阅读 320
收藏 16
点赞 0
评论 0

今天在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

© 著作权归作者所有

共有 人打赏支持
摆渡者
粉丝 314
博文 169
码字总数 205794
作品 0
浦东
程序员
嵌入式Linux学习基础规划篇

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

创客学院 ⋅ 04/10 ⋅ 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

Linux 之父 Linus 的 8 个趣闻轶事

《只是为了好玩:Linux之父林纳斯自传》是一本很古老的书了,2001年就有了中文版,在2014的时候图灵图书又把它重新翻译出版了。Linus是与乔布斯可以相提并论的传奇人物,那么这本书里告诉了我...

oschina ⋅ 2016/02/07 ⋅ 25

linux下编译代码时的默认头文件路径

1 应用编程、驱动源代码中的头文件 1.1 应用编程中包含的头文件是应用层的头文件,是应用程序的编译器带来的 1.1.1 编译windows下的应用程序时 1)使用<>包含的头文件一般会先搜索-I选项后的...

qq_40334837 ⋅ 05/06 ⋅ 0

pycharm远程linux开发和调试代码

pycharm是一个非常强大的python开发工具,现在很多代码最终在线上跑的环境都是linux,而开发环境可能还是windows下开发,这就需要经常在linux上进行调试,或者在linux对代码进行编写,而pyc...

xingfei ⋅ 06/14 ⋅ 0

你为什么看不懂Linux内核驱动源码?

学习嵌入式Linux驱动开发,最核心的技能就是能够编写Linux内核驱动、深入理解Linux内核。而做到这一步的基础,就是你要看得懂Linux内核源码,了解其基本的框架和具体实现,了解其内核API的使...

宅学部落 ⋅ 04/28 ⋅ 0

Git学习系列之Git产生的背景

  史上最浅显易懂的Git教程!   为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人发指,就是简...

技术小哥哥 ⋅ 2016/07/31 ⋅ 0

Linux系统让我的机器学习之路如虎添翼

最早接触linux是在高中的时候,那个时候基本什么也不懂,每次闲下来的时候,都跑去网吧玩游戏,由于零花钱有限,后来就想了很多外门邪道,平时有去黑客论坛的习惯,无意间就接触了linux,那时...

linux-tao ⋅ 04/15 ⋅ 0

Linux操作系统学习中请绕开这五大坑

导读 开发应用比较困难,只适用网络等等,这些对于Linux的评价只是在一些并不了解Linux的人的看法,一但你真正认识了Linux,都会被Linux的魅力所征服... 误区一:开发应用比较困难 这种说法在...

linuxprobe16 ⋅ 05/18 ⋅ 0

Git版本管理的简介与安装[一]

标签(linux): git 笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流 git简介 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的...

陈天刚 ⋅ 2017/08/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部