CentOS 之 开机自启

首先了解 /etc/inittab脚本 (centos7的/etc/inittab已经没有用了)

  

  1. Linux 开机脚本启动顺序: 
  2. 第一步:启动内核
  3. 第二步:执行init (配置文件/etc/inittab)
  4. 第三步:启动相应的脚本,执行inittab脚本,并且执行里面的脚本/etc/init.d rc.sysinit rc.d rc.local。。。
  5. 第四步:启动login登录界面 login
  6. 第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的 /etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile


/etc/rc.d/rc与/etc/rc.d/init.d的关系

在Linux中,/etc/init.d 和 /etc/rc.d/init.d这两个目录,都是用来放服务脚本的,当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。

Debian系 有/etc/init.d 目录,没有 /etc/rc.d/init.d这个目录。

需要说明的是:在CentOS和Ubuntu两个版本中,除了服务脚本放置的目录是相同的,服务脚本的编写及服务配置都是不同的。比如CentOS使用Chkconfig进行配置,而Ubuntu使用sysv-rc-conf进行配置。


  Redhat系 /etc/rc.d/init.d 目录存放的是一些脚本,一般是Linux以rpm包安装时设定的一些服务的启动/关闭脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动、停止、重启这些服务。 
  /etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别),运行init.d里的脚本了,但是并不是直接运行,而是有选择的,因为系统并不需要启动所有的服务。 根据运行级别决定。(系统启动的run level之后,先执行 /etc/rc.d/rc 这个脚本。在CentOS6.X的源码中它都是一上来就check_runlevel(),知道了运行级别之后,对于每一个运行级别,在rc.d下都有一个子目录分别是rc0.d,rc1.d ….. rc6.d。每个目录下都是到init.d目录的一部分脚本的一些链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在 rc5.d下,但是放在这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件,真正干活的是init.d里的脚本。)
  在 /etc/rc.d/rc数字.d 这样的目录下,链接文件前面会带一个Kxx或者Sxx ,带K的表示停止(Kill)一个服务,S表示开启(Start)的意思 。K和S后面带的数字 分别给init.d下面的脚本传递了start和stop的参数。
  例如:/etc/rc.d/init.d/network restart命令。原来传S时相当于执行了/etc/rc.d/init.d/xxx start这条命令,当然K就相当于/etc/rc.d/init.d/xxx stop了。 

补充:也可以修改rc.local达到自启动的目的,但是rc.local是最后执行的自启动配置文件。



下面一起来看一段在CentOS中init.d service 开机时自动启动脚本。

方法一,

编辑  /etc/rc.d/rc.local文件

格式为  程序名  程序路径

例如  a.sh  /home/a.sh

第二种方法

只需要将your_prog_name替换为你真正的脚本或执行文件的名称,将prog_path设置为具体的路径即可。

 代码如下复制代码

# vim /etc/init.d/your_prog_name

#!/bin/bash
#
# Comments to support chkconfig
# chkconfig: - 98 02
# description: your_prog_name service script
#
# Source function library.
. /etc/init.d/functions

### Default variables
prog_name="your_prog_name"
prog_path="/usr/bin/${prog_name}"
pidfile="/var/run/${prog_name}.pid"
options="-c your_conf_file"

# Check if requirements are met
[ -x "${prog_path}" ] || exit 1

RETVAL=0

start(){
  echo -n $"Starting $prog_name: "
  daemon $prog_path $options
  RETVAL=$?
  PID=$(pidof ${prog_path})
  [ ! -z "${PID}" ] && echo ${PID} > ${pidfile}
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog_name
  return $RETVAL
}

stop(){
  echo -n $"Shutting down $prog_name: "
  killproc -p ${pidfile}
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog_name
  return $RETVAL
}

restart() {
  stop
  start
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status $prog_path
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart|status}"
    RETVAL=1
esac

exit $RETVAL
# chmod +x /etc/init.d/your_prog_name
# chkconfig your_prog_name on


centos中service命令与/etc/init.d的关系以及centos7的变化

service httpd start 其实是启动了存放在/etc/init.d目录下的脚本。
但是centos7的服务管理改规则了。
CentOS 7继承了RHEL 7的新的特性,例如强大的systemctl,
而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,
也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,
说实在的,变的简单而易用了许多。

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,
有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,
还是存在系统服务里吧,即:/usr/lib/systemd/system目录下
每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值