系统本身自带了说明,在/usr/share/doc/initscripts-(*)/sysvinitfiles,内容如下:

所有System V init脚本都命名为/etc/rc.d/init.d/<servicename>,其中<servicename>是服务的名称。必须没有“.init”后缀。

示例脚本:

#!/bin/bash
#
# /etc/rc.d/init.d/<servicename>
#
# <description of the *service*>
# <any general comments about this init script>
#
# <tags -- see below for tag definitions. *Every line* from the top
# of the file to the end of the tags section must begin with a #
# character. After the tags section, there should be a blank line.
# This keeps normal comments in the rest of the file from being
# mistaken for tags, should they happen to fit the pattern.> # Source function library.
. /etc/rc.d/init.d/functions <define any local shell functions used by the code that follows> case "$1" in
start)
echo -n "Starting <servicename> services: "
<start daemons, perhaps with the daemon function>
touch /var/lock/subsys/<servicename>
;;
stop)
echo -n "Shutting down <servicename> services: "
<stop daemons, perhaps with the killproc function>
rm -f /var/lock/subsys/<servicename>
;;
status)
<report the status of the daemons in free-form format,
perhaps with the status function>
;;
restart)
<restart the daemons, normally with $0 stop; $0 start>
;;
reload)
<cause the service configuration to be reread, either with
kill -HUP or by restarting the daemons, possibly with
$0 stop; $0 start>
;;
probe)
<optional. If it exists, then it should determine whether
or not the service needs to be restarted or reloaded (or
whatever) in order to activate any changes in the configuration
scripts. It should print out a list of commands to give to
$0; see the description under the probe tag below.>
;;
*)
echo "Usage: <servicename> {start|stop|status|reload|restart[|probe]"
exit 1
;;
esac

注意:重启和重载功能可以(通常)组合成一个测试,vis:

restart|reload)

不禁止您添加其他命令; 列出您打算以交互方式使用到使用消息的所有命令。

/etc/rc.d/init.d/functions函数

daemon [+/-nicelevel] program [arguments] [&]

如果守护程序尚未运行,则启动该守护程序。还有其他一些有用的东西,例如,如果守护进程意外终止,则保留守护进程。

killproc program [signal]

向程序发送信号; 默认情况下,它发送一个SIGTERM,如果进程没有死,它会在几秒钟后发送一个SIGKILL。

如果找到pid文件,它还会尝试删除它。

pidofproc program

试图找到一个程序的pid; 检查可能的pidfiles,使用pidof程序,甚至使用ps。主要用于此文件中的其他函数,但也可用于脚本。

status program

打印状态信息。假设程序名称与servicename相同。

Tags.

# chkconfig: <startlevellist> <startpriority> <endpriority>

必须。<startlevellist>是默认情况下应启动服务的级别列表。<startpriority>和<endpriority>是优先级编号。例如:

  # chkconfig:2345 20 80有关详细信息,请阅读“man chkconfig”。

除非有一个非常好的,显性相反的原因,<endpriority>应该等于 100 - <startpriority>

# description: <multi-line description of service>

必须。几行描述,继续使用'\'字符。以下行中的初始注释和后续空格将被忽略。

# description[ln]: <multi-line description of service in the language \ # ln, whatever that is>

可选。应将描述翻译成指定的语言。

# processname:

可选,允许多个条目。对于脚本启动的每个进程名称,应该有一个进程名称条目。例如,samba服务启动两个守护进程:

  #processname:smdb 
  #processname:nmdb

# config:

可选,允许多个条目。对于守护程序使用的每个静态配置文件,请使用单个条目。例如:

  # config: /etc/httpd/conf/httpd.conf
  # config: /etc/httpd/conf/srm.conf

(可选)如果服务器将自动重新加载配置文件(如果已更改),则可以在行中附加“autoreload”一词:

  # config: /etc/foobar.conf autoreload

#pidfile:

可选,允许多个条目。使用就像配置条目一样,除了它指向pidfiles。假设pidfiles仅在进程创建时更新,而不是更晚。该文件的第一行应该是PID的ASCII表示; 终止换行符是可选的。不检查除第一行以外的任何行。

#project: true

可选,使用IN PLACE的processname,config和pidfile。如果存在,则可以通过运行以下命令来实现正确的重新加载 - 如果必要的循环:

command = $(/ etc / rd.d / init.d / SCRIPT probe)
[ - n“$ command”] && /etc/rc.d/init.d/SCRIPT $ command

其中SCRIPT是服务的sysv init脚本的名称。

作为示例,需要执行复杂处理的脚本可以返回“run /var/tmp/<servicename.probe.$$”并实现“run”命令,该命令将执行命名脚本然后将其删除。

请注意,如果不需要执行任何操作使服务与其配置文件同步,则probe命令应该只是“exit 0”。

需要注意以下几点:

1、# chkconfig和# description不能少,必须写。

2、chkconfig的<startpriority> <endpriority>为启动优先级,在man中查询不到,一般end...不用理解,直接100-start...即可。start为开始的顺序,一般系统从小执行到大,数值任意,这个对于依赖启动有很大的帮助,比如控制先启动某个服务,再启动某个服务。以下是查询设置后的命令:

# 查询启动级别
chkconfig --list <servicename>
# 查询启动顺序
grep chkconfig /etc/rc.d/init.d/<servicenaem>

参考:

https://blog.hazrulnizam.com/create-init-script-centos-6/

https://serverfault.com/questions/176055/how-to-change-linux-services-startup-boot-order

http://www.sensi.org/~alec/unix/redhat/sysvinit.html

编写CentOS的System V init启动脚本的更多相关文章

  1. daemon 启动system V init 和 systemd 配置

    先试着写一个udpserver的daemon #include <stdio.h> #include <sys/socket.h> #include <sys/types ...

  2. Systemd初始化进程/RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比

    Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程.初始化进程作为Linux系统的第一个进程,它需要完成Li ...

  3. linux系统 initrd.img中init启动脚本分析

    概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...

  4. 系统INIT 启动脚本的结构/etc/rc.d/init.d/*

  5. systemd、upstart和system V

    http://blog.csdn.net/kumu_linux/article/details/7653802  systemd是Linux下的一种init软件,由Lennart Poettering ...

  6. Linux system V

    Sysvinit 的小结 Sysvinit 的优点是概念简单.Service 开发人员只需要编写启动和停止脚本,概念非常清楚:将 service 添加/删除到某个 runlevel 时,只需要执行一些 ...

  7. (转)Ubuntu init启动流程分析

    原文 upstart homepage 现行的Linux distros主流的有两种init方式:一种是广为流传的System V initialization,它来源于Unix并且至今仍被各种Lin ...

  8. ubuntu init启动流程

    ubuntu的init方式有两种:一种是System V initialization,一种是Upstart.ubuntu6.10以前的版本是第一种方式,之后的版本是第二种方式. 在旧式的System ...

  9. System v和posix的IPC对比

    之前有一篇关于共享内存的System V和Posix的对比: http://www.cnblogs.com/charlesblc/p/6261469.html POSIX(Portable Opera ...

随机推荐

  1. NEST - 编写布尔查询

    Writing bool queries Version:5.x 英文原文地址:Writing bool queries 在使用查询 DSL 时,编写 bool 查询会很容易把代码变得冗长.举个栗子, ...

  2. 【Android】android:windowSoftInputMode属性详解

    activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一]当有焦点产生时,软键盘是隐藏还是显示 [二]是否减少活动 ...

  3. angularjs 中通过 $location 进行路由跳转传参

    $location.path('/page1').search({id: $scope.id,name:$scope.name}); 带参数跳转页面,在新的页面通过$routeParams接收参数 $ ...

  4. JMeter实现Oracle参数化(1)

    http://www.ithao123.cn/content-10469577.html

  5. 完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五

    const toChineseNum = (num) => { const unit = ['', '十', '百', '千'] const counts = ['零', '一', '二', ' ...

  6. Berlekamp-Massey算法简单介绍

    请阅读本文的同学们注意:之前这篇博客和所附代码有点问题,求的不一定是最短递推式,非常抱歉 看毛爷爷的论文大概断断续续看了一个月了,看得不是很懂,google了一波好像很快就看懂了,就先口胡一下这个算法 ...

  7. Spring错误小结

    之前在做项目的时候发现无法解析xml文件导致项目运行失败的问题,其实是无法找到导入的Schema约束,在配置Schema约束的时候在XML Catalog 中key配置*.xsd网址,location ...

  8. react-route4 学习记录

    新建项目 create-react-app react20180413 安装路由 npm install react-router-dom -S 跑通路由 删除全部文件后 重新新建index.js 代 ...

  9. Cinema CodeForces - 670C (离散+排序)

    Moscow is hosting a major international conference, which is attended by n scientists from different ...

  10. POJ 2299 Ultra-QuickSort (离散化)+【树状数组】

    <题目链接> 题目大意: 给你一段序列,问你如果每次只交换该序列相邻的两个元素,最少需要交换多少步才能够使该序列变为升序排列. 解题分析: 不难发现,其实本题就是让我们求原始序列的逆序对, ...