Linux下编写自己的service

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

于是开干:

?


1

2

su

vi myservice

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

#!/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/下面去,增加可执行权限,并添加到系统服务:

?


1

2

3

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,看看哪里不对,结果发现里面真有这个注释:

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

#!/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只是包含了更多的逻辑而已,本质上和这个例子没什么区别。

时间: 2024-10-29 23:53:43

Linux下编写自己的service的相关文章

Linux下编写Lua扩展so文件和调用方法实例

  这篇文章主要介绍了Linux下编写Lua扩展so文件和调用方法实例,本文给出C语言代码.编译SO文件.Lua中调用代码实例,需要的朋友可以参考下 代码如下: #include #include #include #include #include #include #include #include #include #include #include "lua.h" #include "lualib.h" #include "lauxlib.h&qu

Windows下与Linux下编写socket程序的区别

[Windows: 头文件的区别] #include<winsock.h>#include<winsock2.h> [Windows: 初始化的区别] WSADATA wsaData;WSAStartup(0x202,&wsaData); [Windows: 声明Socket]  SOCKET类型 [Windows: Socket关闭] closesocket() [Windows: Socket操作错误返回值]  SOCKET_ERROR [Windows: 设置sock

Linux下编写Lua扩展so文件和调用方法实例_Lua

复制代码 代码如下: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <errno.h> #include <string.h>   #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <limits.h>   #include

Linux下获取当前时间到1970年之前某年份的秒数的C代码实现

一.问题描述 在Linux下编写一C程序,用于获取当前时间到1970年之前某年份的秒数. 二.C代码实现 /********************************************************************* * 版权所有 (C)2015, Zhou Zhaoxiong. * * 文件名称:GetSecNumBetweenTwoYear.c * 文件标识:无 * 内容摘要:获取当前时间到1970年之前某时间的秒数 * 其它说明:无 * 当前版本:V1.0 *

在 Linux下编译及调试 C 代码的简易指南

对于Linux下的C程序员来 说,几乎天天都会和Linux打交道.但在很多人的眼中,Linux是一个易用性极差.靠命令驱动的操作系统,根本无法与有着友好用户界面的 Windows相比.确实是这样的,即使大家的程序是运行在Linux下,基于以下种种原因,我们的大部分工作还是在Windows下完成的: 第一,除了编译调试代码之外,每个程序员还有很多工作要做,像文档编写.邮件发送及回复.PPT制作等,这些工作在Windows下做要更方便快捷一些. 第二,公司及项目组的资源有限,一般不会为每个开发人员配

一份简单的在 Linux下编译及调试 C 代码的指南

一份简单的在 Linux下编译及调试 C 代码的指南 对于Linux下的C程序员来说,几乎天天都会和Linux打交道.但在很多人的眼中,Linux是一个易用性极差.靠命令驱动的操作系统,根本无法与有着友好用户界面的Windows相比.确实是这样的,即使大家的程序是运行在Linux下,基于以下种种原因,我们的大部分工作还是在Windows下完成的: 第一,除了编译调试代码之外,每个程序员还有很多工作要做,像文档编写.邮件发送及回复.PPT制作等,这些工作在Windows下做要更方便快捷一些. 第二

Linux下Fork与Exec使用

一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法.与DOS和早期的Windows不同,Unix/Linux系统是真正实现多任务操作的系统,可以说,不使用多进程编程,就不能算是真正的Linux环境下编程. 多线程

关于如何编写启动linux下的tomcat脚本问题

问题描述 关于如何编写启动linux下的tomcat脚本问题 每次启动tomcat,都需要进入到具体的路径下 /data/uficc/program/apache-tomcat-7.0.65/bin ,然后 ./startup.sh & 启动tomcat,需要重启是都是先kill掉进程后再次启动. 我的需求是:能不能编写个脚本,让我无论在那个路径下,只需要简单输入 :Manage stop tomcat 就可以停止tomcat服务,输入 Manage start tomcat 可以启动tomca

linux驱动-在linux kernel3.13环境下编写一个模块用netfilter来过滤IP地址

问题描述 在linux kernel3.13环境下编写一个模块用netfilter来过滤IP地址 在linux kernel3.13环境下编写一个模块用netfilter来过滤IP地址,其中想在模块中打开存在磁盘上的ip.txt文档读入需要过滤的IP,但是用来filp_open()打开文件总是失败,按照网上说的get_fs;set_fs;get_fs;却依然失败,且每次插进内核都会造成系统崩溃,请大侠帮助