`

创建自定义Linux服务(原创)

 
阅读更多

概述

网上有不少关于如何让Linux自动运行自己编写的脚本或者程序的方法,但是大多数都是把命令写到/etc/rc.d/rc.local或者/etc/rc.local里,这样虽然能够实现随机运行,但是并不够灵活。不能像mysql,apache等服务一样能够使用service命令或者调用init.d下的脚本启动、关闭或者重启进程。例如,
service mysql restart
service apache2 stop
或者
/etc/init.d/mysql restart
/etc/init.d/apache2 stop
同时也无法整合入heartbeat这样的高可用程序中进行监控。因此,创建自定义的linux服务还是有其必要性的。
因为不同的Linux发行版本,对后台服务的处理方式不大一样,所以下面以RHEL系统为例,编写一个Oracle随机启动服务。

创建服务

服务脚本

cat /etc/init.d/czm
#!/bin/bash
# chkconfig: 2345 20 81
#description: czmmmmm                      
export ORACLE_SID=orcl
export ORACLE_PID=`ps -ef|grep ora|grep -E 'smon|pmon|ckpt'|wc -l`
export ORACLE_BASE=/u01/app
export ORACLE_HOME=/u01/app/oracle
export PATH=$PATH:$ORACLE_HOME/bin
ORA_OWNR="oracle"
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
   then
   echo "Oracle startup:can't start"
   exit 1
fi
case "$1" in
  start)
  echo -n "Starting Oracle:"
  su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbstart"
  echo "OK"
  ;;
  stop)
  echo -n "Shutdown Oracle:"
  su - $ORA_OWNR -c "$ORACLE_HOME/bin/dbshut"
  echo "OK"
  ;;
  status)
  if [ $ORACLE_PID = "3" ];then
     echo "Oracle Instance is running..."
  else echo "Oracle Instance is not running..."
  fi
  ;;
  restart)
  $0 stop
  $0 start
  ;;
  *)
  echo "Usage:`basename $0` start|stop|status|restart"
esac
exit $?

脚本说明

#!/bin/bash,声明脚本采用bash作为shell。#chkconfig后面三个参数分别表示服务在哪几个运行级别启动(本例是在2,3,4,5),在启动和关闭时服务脚本执行的优先级。#description是对该服务的描述。加上这两行之后才能用chkconfig命令添加服务。另外,服务脚本最好放在/etc/init.d/目录下

一个linux服务脚本必须包含start,stop和restart,而status不是必须的。关于status有两种方式实现以查看程序的运行状态,一种为上文提到的根据程序的特点自行编写判断脚本,另一种则是利用linux自带的/etc/init.d/functions这个脚本中包含了下面包含的status函数,来打印当前服务进程的状态当然前提是运行的程序能够产生pid文件 ,代码如下

#!/bin/bash
# autoruntest the shell script takes care of autoruntest auto start and stop
# chkconfig:   2345 20 80
# description: autoruntest
# processname:     /etc/rc.d/init.d/autoruntest
EXEC_PATH=/home/paradis/app
EXEC=autoruntest
PID_FILE=/var/run/autoruntest.pid
DAEMON=/home/paradis/code/autoruntest
# Source function library.
.  /etc/rc.d/init.d/functions
if ! [ -x $EXEC_PATH/$EXEC ] ; then
    echo "ERROR: $EXEC_PATH/$EXEC not found"
    exit 1
fi

stop()
{
    echo "Stoping $EXEC ..."
    killall $DAEMON >/dev/null
    usleep 100
    echo "Shutting down $EXEC: [ OK ]"

   rm -f /var/lock/subsys/Oracle
}

start()
{

    touch /var/lock/subsys/Oracle
    echo "Starting $EXEC ..."
    $DAEMON > /dev/null &
    usleep 100
    echo "Starting $EXEC: [ OK ]"
}

restart()
{
    stop
    start
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status -p $PID_FILE $DAEMON
    ;;
    *)
        echo "Usage: service $EXEC {start|stop|restart|status}"
        exit 1
esac
exit $?

两点说明

1、/var/run

根据linux的文件系统分层结构标准(FHS)中的定义:

/var/run目录中存放的是自系统启动以来描述系统信息的文件。比较常见的用途是daemon进程将自己的pid保存到这个目录。FHS标准要求这个文件夹中的文件必须是在系统启动的时候清空,以便建立新的文件。
为了达到这个要求,某些linux中/var/run使用的是tmpfs文件系统,这是一种存储在内存中的临时文件系统,当机器关闭的时候,文件系统自然就被清空了。使用df -Th命令能看到类似的输出结果:
文件系统    类型    容量  已用  可用 已用%% 挂载点
none         tmpfs    990M  384K  989M   1% /var/run
none         tmpfs    990M     0  990M   0% /var/lock
当然/var/run除了保存进程的pid之外也有其他的作用,比如utmp文件,就是用来记录机器的启动时间以及当前登陆用户的。

2、/var/lock/subsys
/var/lock/subsys/目录表示文件是否上所,通常与/var/run目录结合使用以判断程序是否进行

参考至:http://blog.csdn.net/q191201771/article/details/6134512
               http://space.itpub.net/26442672/viewspace-715235

               http://www.508648.com/post-5.html

               http://www.cnblogs.com/silverwings/archive/2010/08/02/1790801.html

               http://xiaoxia.org/2011/11/15/create-a-simple-linux-daemon/

               http://www.hao32.com/unix-linux/39.html

               http://hi.baidu.com/naruto6006/item/3bf69a234ed390142a0f1cdd

本文原创,转载请注明出处、作者

如有错误,欢迎指正
邮箱:czmcj@163.com

0
0
分享到:
评论
1 楼 zxjlwt 2015-03-16  
学习了。
http://surenpi.com

相关推荐

    【原创】【Windows下对Linux批量管理工具TeamRemote】

    2. **命令行接口**:TeamRemote内置了命令行界面,允许用户输入SSH命令,执行在所有或选定的远程服务器上,如更新软件包、重启服务等。 3. **脚本支持**:用户可以编写或导入自定义脚本,进行自动化任务处理,例如...

    LINUX连接工具

    1. **文件传输**:通过SSH协议,WinSCP提供安全的SFTP(SSH文件传输协议)和FTP(文件传输协议)服务,允许用户在本地计算机与Linux服务器之间传输文件,支持断点续传和批量操作。 2. **同步浏览**:用户可以在本地...

    (原创)给那些想使用linux又不想安装的朋友 更正:虚拟机用的是VMware文中写成了virtual PC给你造成的困扰十分抱歉

    5. **自定义屏幕分辨率**:在Linux安装完成后,可能会发现屏幕分辨率与主机不匹配,需要手动调整。这通常可以通过设置X Window System的显示配置来实现。文章未详述具体步骤,但在Linux中,可以使用`xrandr`命令或者...

    作者原创<>.pdf

    - 完成上述步骤后,磁盘应准备好启动并运行自定义构建的Linux操作系统。 **6. initramfs.img进一步制作** - **6.1 使用busybox**: BusyBox是一个包含许多标准Unix工具的小型软件包,非常适合用于构建轻量级的...

    picview-final-src.tar.gz_Linux 截屏_QT 截屏_QT截屏_linux壁纸_图片浏览

    描述中提到“自己原创的MotoE2”,可能是指这个程序最初是在MotoE2设备上开发或测试的,但考虑到它是在Linux下运行,这可能指的是一个特定的开发环境或硬件配置。"Linux下QT图片浏览程序"再次确认了它的主要功能和...

    基于Android的移动应用app屏幕锁源码(原创).rar

    【标题】"基于Android的移动应用app屏幕锁源码(原创).rar"指的是一个包含原创Android应用程序屏幕锁定功能的源代码压缩包。这个资源对于Android开发者,尤其是那些希望学习或实现安全屏幕锁机制的人来说非常有价值...

    移植qt-embedded-linux-opensource-src-4.5.3至mini2440(王安喜原创)

    2. **编译安装tslib-1.4**:将tslib-1.4解压缩并配置,使其安装在自定义路径/home/mytslib/下,以便后续使用。 3. **编译安装QT-X11-4.5.3**:解压qt-x11-opensource-src-4.5.3,配置并编译,生成在Fedora9上运行的...

    Windows操作系统下Linux虚拟机的安装与配置教程图解

    在IT行业中,虚拟化技术是不可或缺的一部分,它允许我们在一台物理机器上运行多个独立的操作系统实例。本教程将详述如何在Windows操作...感谢您的阅读,如果本文对您有所帮助,请分享给更多人,并尊重原创,注明出处。

    一种Linux下基于Upnp和FUSE的虚拟网络用户文件系统的构建与研究.pdf

    而FUSE则允许非特权用户在Linux内核中实现自定义文件系统,无需修改内核代码。结合这两种技术,作者构建了一个虚拟网络用户文件系统,使得用户可以在统一的文件系统视图下操作网络中的共享资源。 在该研究中,作者...

    J2EE入门开发原创教程

    《J2EE入门开发原创教程》是一份专为初学者准备的详细教程,由彭晨阳(J 道)撰写,旨在帮助读者快速搭建并理解J2EE开发环境,从而进行实际的项目开发。本教程的核心是使用JBoss 3.2.2作为应用服务器,配合MySQL 4.0...

    IPSEC 策略文件(本人原创)

    IPSEC策略文件(NEW).ipsec很可能是作者自定义创建并导出的,这意味着它包含了作者根据其服务器环境和安全需求定制的规则。文件可能包含以下元素: 1. **安全策略**:定义了哪些流量应受IPSEC保护,包括源和目的地址...

    原创简易java计算器

    Java是一种跨平台的编程语言,它的"一次编写,到处运行"特性使得这个计算器可以在不同的操作系统上运行,如Windows、Linux或Mac OS。 【压缩包子文件的文件名称列表】中: 1. "计算器.jar" 是Java应用程序的可执行...

    Jquery EasyUI DeskTop原创

    **jQuery EasyUI Desktop原创** jQuery EasyUI Desktop 是一个基于JavaScript库jQuery和EasyUI框架的桌面化应用程序开发解决方案。它旨在为Web应用提供一种类似于Windows操作系统(特别是Windows 8)的用户交互体验...

    2-VM虚拟机安装CentOS8.4.2105系统本地搭建宝塔和网站(自己录制原创视频全套)

    在VMware中创建新的虚拟机时,选择"自定义"配置并选择"Linux"作为操作系统类型,然后选择"Red Hat Enterprise Linux 7.x 64位",因为CentOS 8与RHEL 7.x兼容。 接着,我们需要获取CentOS 8.4.2105的ISO镜像文件,将...

    Zpe下载赵浩然原创官方

    在实际开发中,用户可以根据需要导入库函数,创建自定义类,进行条件判断,循环操作等复杂逻辑。 总的来说,ZPE是一个具有潜力的编程语言,尤其适合初学者入门和快速原型开发。赵浩然的原创官方版本确保了其质量和...

    Android 7.0 全套教程PPT 全部手写 原创

    对于UI设计,会涵盖各种控件的使用,如Button、TextView、EditText等,以及自定义视图的创建。同时,事件监听和响应机制也是讲解的重点,如OnClickListener和OnTouchListener的实现。 Android 7.0的多窗口支持是新...

    Simple Browser 简易浏览器(原创)

    "Simple Browser 简易浏览器(原创)" 是一个专为用户设计的轻量级网络浏览应用,它提供了基本的网页浏览功能,...通过创建这样一个浏览器,开发者不仅可以深入了解互联网工作的原理,还能提升软件开发和项目管理的技能。

    [原创]Informatica PowerCenter 8.1安装配置手册(杨晓东2006-08-24)

    - 选择“Custom”进行自定义安装,并选择所需的服务(如PowerCenter Services)。 - 设定Node的根路径,通常建议为默认值或符合组织命名规范的路径。 - 创建新的Domain,设定其名称以及元数据存储库的位置和类型(如...

    [浪曦原创]图片管理器 第3讲 (cgbluesky).rar

    【标题】:“[浪曦原创]图片管理器 第3讲 (cgbluesky).rar”这一标题揭示了这是一个关于图片管理器的系列教程的第三部分,由“浪曦”原创制作,并由“cgbluesky”参与或标识。这个标题暗示我们将深入探讨一个用于...

Global site tag (gtag.js) - Google Analytics