怎样将shell脚本自定义为服务

本文告诉你如何将脚本当成一种系统服务,开机的时候能够自动运行,关机的时候也能够自动关闭(非强行关闭)。

 

chkconfig将发挥巨大威力

 

linux系统的服务都放/etc/rc.d/init.d目录下。

 

但是仅仅把脚本放在里面,系统是无法带起的,必须在/etc/rc.d/rc0.d~rc6.d目录下分别要创建一些软链接,而且链接的名字必须以K或者S打头,S打头表示在开机的时候自动给init.d目录下的脚本自动传递start参数,K打头就是传递stop参数.

 

对各个运行级的详细解释:
0 为停机,机器关闭。
1 为单用户模式,就像Win9x 下的安全模式类似。
2 为多用户模式,但是没有NFS 支持。
3 为完整的多用户模式,是标准的运行级。
4 一般不用,在一些特殊情况下可以用它来做一些事情。
例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 就是 X11 ,进到 X Window 系统了。
6 为重启,运行 init 6 机器就会重启。

 

以上表示/etc/rc.d/rc0.d中的链接就是在机器关闭的时候起作用。依次类推。

 

如果手动去一条条的创建链接,那么效率也太低了。而且容易出错。(以一个test脚本为例)

首先要把test脚本copy到/etc/init.d目录下,然后

$ cd /etc/init.d 

$ chkconfig --add test

这样就会自动添加链接了。但是仅靠这条命令怎么只能在0~6的文件夹下创建K还是S打头的链接呢。

这就需要进一步做处理了,那就是在test脚本开始部分添加一下代码:

#chkconfig: 2345 88 12

注意开始的"#"号不能少。2345就是代表在rc2~5.d目录下创建S打头的链接。88就是代表在88位启动test服务。12就是在关机时第12位关闭。也就是在2345中的链接名为S88test,0,1,6中链接名为K12test。

所以这都是环环相扣的,缺一不可。

 

但是这么设置了开机的test脚本确实可以接受到start参数。但是发现关机的时候却还是不能接受到stop参数

这是怎么回事呢?还要进一步做处理。

有没有发现系统提供的脚本中的start函数中都有以下这句话:

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/test

 

 

系统关闭的过程(发出关闭信号,调用服务自身的进程)中会检查/var/lock/subsys下的文件,逐一关闭每个服务,如果某一运行的服务在/var/lock/subsys下没有相应的选项。
在系统关闭的时候,会像杀死普通进程一样杀死这个服务。
所以这样就可以确保在关闭的时候脚本能够正常接受到stop参数
再介绍两条命令:
#删除服务
$ chkconfig --del test  
#查看服务
$ find  /etc/rc.d -name '*test' -print
怎么样,其实很简单吧?动手试试把。

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值