设为首页 收藏本站
查看: 1222|回复: 0

[经验分享] centos启动流程及实现service管理apache服务

[复制链接]

尚未签到

发表于 2018-4-22 14:24:54 | 显示全部楼层 |阅读模式
centos启动流程及实现service管理apache服务Cenots6如何启动,它的启动流程是怎样?

  •   系统加电,Power ---up /Reset
  •   system startup --- BIOS/bootmonitor
  •   stage 1 bootloader --- Master Boot Record
  •   stage 2 bootloader --- Grub,LILO,etc.(其中Grub将stage2分为1.5和2)
  •   kernel --- linux    内核空间
  •   init --- user-sapce 用户空间
    Operation
简单过程:

  •   系统首次引导或重启时加电的瞬间处理器(cpu)执行存在于BIOS中的一段已知代码,而后选择一个可引导设备,pc可用来做引导的设备多样(灵活),BIOS需确定使用哪个设备来引导
  •   将stage 1 的引导加载程序(bootloader)加载至RAM执行.bootloader大小小于512Bytes(一个扇区sector),主要工作是加载stage 2 的引导加载程序
  •   stage2第二阶bootloader加载至RAM执行,通常屏幕有显示动画,将linux内核压缩形态映像和一个可选的初始RAM磁盘(initramfs临时根文件系统)加载至内存.stage2 bootloader控制权交给内核映像,解压和初始化,此阶段stage2 bootloader会检测系统硬件,枚举 系统链接的硬件设备,挂载根设备,加载内核必要的modules内核模块.
  •   启动第一个用户空间程序(init).执行高级系统初始化工作.
细化理解:
1. BIOS/Bootmonitor
  cpu加电瞬间自动寻找BISO存放位置,在此之前不依靠任何软件纯硬件执行,开始执行BISO的第一步加电自检(POST):POST对硬件检测,BIOS第二步本地设备枚举和初始化.
BIOS有两部分组成:POST代码和运行时服务.
                POST完成后从内存清理出来;运行时服务依然存在于内存,目标操作系统能够继续使用BIOS运行时服务所提供的服务.
  要引导一个操作系统,BIOS运行时会依据CMOS的设置定义的顺序来搜索处于激活状态并可以引导的设备.可引导设备可以是软盘、硬盘、CD-ROM、硬盘上的分区、网络上的设备.
搜索到可引导的硬盘(通常是硬盘)后,主引导记录(MBR)中包含主引导加载程序.(MBR是512Btyes的一个扇区(sector),位于磁盘的第一个扇区(0磁道0柱面1扇区))将MBR加载至RAM(Random Access Memory,随机存储器,与cpu直接交互数据,速度快),BIOS将控制权交给MBR.
2. stage 1 bootloader:
  MBR中的主引导加载程序(bootloader)是512Bytes的映像,其中包含bootloader程序代码和一个分区表.前446Bytes是主引导加载程序--其中包含可执行bootloader代码和错误消息文本.接下来64Bytes是分区表,共包含4个分区记录(每个分区64/4=16Bytes).MBR以2Bytes特殊字节(0xAA55)(magic number,魔数,多用来检测完整性)结束.用来检测MBR的有效性.
    centos6 备份MBR的信息的方法:
        dd if=/dev/sda of=MBR.bak bs=1 conut=512
        od -xa MBR.bak 查看以十六进制和ASCII码打印二进制文件
  MBR中的主引导加载程序主要的工作是查找并加载次引导加载程序(即stage 2 bootloader),通过在分区表中查找一个激活分区后,扫描分区中的其他分区确保其他都是非活动的,此后将激活分区中的引导记录从设备中加载至RAM并执行.
3.stage 2 bootloader:
  次引导加载程序可形象的称为内核加载程序.主要任务是加载linux kernel和可选的初始RAM磁盘.
    一般的pc机中,stage 1 bootloader和stage 2 bootloader统称为GRand Unified Bootloader(GRUB)或Linux Loader(LILO).
        GRUB阶段的引导加载程序:
            /boot/grub中包含了stage1,stage1.5,stage2引导加载程序,和其他引导加载程序及kernel,initramfs.
  GRUB通过将两个阶段转化为三个阶段的引导加载程序实现的.
  stage 1:MBR引导了一个1.5阶段的引导加载程序加载并运行(而不是直接将stage2中的次引导加载程序引导过来)
    stage 1.5:引导加载程序,可以理解包含Linux内核映像的特殊文件系统.(比如/boot/grub/e2fs_stage1_5要从ext2或ext3中加载)
    stage 2:等待stage1.5引导加载完成后stage2次引导加载器开始加载,完成之后,GRUB可以在接受请求的显示内核列表(在/etc/grub.conf中定义,软符号链接/etc/grub/menu.lst和/etc/grub.conf),可以选择内核和修改内核参数.甚至可是使用Grub命令行提供的命令对引导过程进行手工定义启动.
  grub手工自定义:可以用initrd的映像引导一个kernel
        grub>root (hd0,0)            #定义可启动的设备
        grub>kernel /vmlinuz          #定义启动时的内核
        grub>initrd /initramfs.img   #定义initramfs镜像
        grub>boot                       #按照手工定义的方式启动
  将stage2的bootloader加载至内存后,就可以对文件系统进行查询,将默认的内核映像和initrd映像加载至内存中.当映像文件准备好之后,stage 2 bootloader调用内核映像.
4.kernerl --- Linux
  内核映像被加载至内存中,stage2 bootloader控制权释放后,kernel 阶段开始.内核映像不是可执行的内核,是被压缩的kernel映像,通常是vmlinuz.在这个内核映像的前面是一个例程,实现少量的硬件设置,并从包含内核的映像中将kernel解压缩出来,而后将内核加载至高端内存中,如果有初始RAM磁盘映像,则将其一起加载至内存,并标明供以后使用.此后,该例程会调用内核,并开始启动内核引导的过程.
启动init.即第一个用户空间进程(user-sapce process).通过启用中断,抢占式的调度器就可以周期性的接管控制权,从而提供多任务能力.
在内核引导的过程中,初始RAM磁盘(initrd)是由stage 2 bootloader加载至内存中,被复制到RAM中并挂载到系统上.initrd会作为RAM中的临时根文件系统使用,允许内核在没有挂载任何物理磁盘的情况下完整的实现引导,由于与外围设备交互的模块可能是initrd的一部分,所以内核可以很小,但仍需要支持大量的可能的硬件配置,内核引导完成之后就可以将initrd根文件系统卸载掉,并挂载真正的文件系统.
5.init阶段
  当内核引导并初始化之后,内核就可以启动自己的第一个用户空间应用程序了,这是第一个调用标准函数库编译的程序.桌面系统中第一个启动的程序通常是/sbin/init进程.到这里系统准备就绪了.
init在centos不同版本程序的类型:
centos5:SysV init
    配置文件:/etc/inittab
centos6:upstart
    配置文件:/etc/inittab
        /etc/init/*.conf
centos7:systemd
    配置文件:/usr/lib/systemd/system,/etc/systemd/system  init相关的配置文件:/etc/inittab
    每行定义一种action以及对应的process
        id:runlevel:action:process
            id: 一个任务的标志符
            runlevel: 运行级别,空则标识所有的进程
            action:定义任务的启动条件
            process:任务
        action:
            wait:等待切换至此级别是执行一次
            respawn:一旦此任务终止,就自动重新启动
            initdefualt:设定默认启动级别
            sysinit:设定系统初始化的方式,此处一般指定/etc/rc.d/rc.sysinit  /etc/rc.d/rc 接受数字为参数
        K##string:开机停止  (先KILL后start)数字越小越优先,依赖的服务先关闭,被依赖的后关闭
        S##string:开机启动  /etc/init.d/
    让程序接受chkconfig的管理
        chkconfig --add  services_name
    不再接受chkconfig管理
        chkconfig --del services_name
    能被cokconfig所识别
        #chkconfig: 运行级别  启动级别  关闭级别
    chkconfig:
        --list name  显示单个的服务情况
    修改控制的级别:
        --level LEVELS   默认2345
        注:正常情况下,最后一个服务S99local没有连接至/etc/init.d下,而是直接指向了/etc/rc.local下,因此自定义的开机启动脚本直接放到/etc/rc.local中即可
    /sbin/mingetty 会调用login程序;
    打开基于vga的虚拟终端的还有getty等也可以.那么如何实现讲一个自定义的程序或服务为chkconfig及service的支配.
  以上次shell程序自动化编译的apache service为例(脚本实现apache批量自动化编译移步http://cityx.blog.51cto.com/9857477/1918435):
按照系统启动的流程及chkconfig的特性实现:

  •   开机系统会运行/etc/init.d/下的脚本或程序,那么将自定义的脚本或程序放入该目录下就可以开机时被执行,当然将脚本的路径加入到rc.local下开机时也会被执行一般情况下值执行一次,我们的需求是作为可控的服务.
  •   符合被chkconfig管理的服务脚本要求
    # chkconfig: 2345 11 88      #脚本中需存在的格式
    # description: This starts the Apache Daemon  #centos6 可省按照上面的思路:
      下面是我httpd服务(程序名为httpd)的脚本:将此脚本放入/etc/init.d下即可,留作下步用.
    #!/bin/bash
    #
    # chkconfig: 345 98 01
    #
    httpdir=/app/apache/httpd
    pidfile()
    {
         pgrep  httpd > /app/apache/httpd/httpd.pid
    }
    VarVerification()
    {
         if [ -z $httpdir ] ;then
                     httpdir=/app/apache/httpd
         fi
    }
    case $1 in
    start)
         VarVerification
         $httpdir/bin/apachectl start 1>/dev/null 2>$httpdir/start.log
         if [ $? -eq 0 ] ;then
                if [ -d  /app/apache/httpd ] ;then
                  pidfile
                else
                  echo "The file 'httpd.pid' is  not exist!"
                  exit 10
                fi
             else
                  exit 11
         fi
         ;;
    stop)
         VarVerification
         if [ -f $httpdir/httpd.pid ];then
             $httpdir/bin/apachectl  stop
             if [ $? -eq 0 ] ;then
                  mv $httpdir/httpd.pid /tmp &>/dev/null
             fi
         else
             pgrep httpd &>/dev/null
             if [ $? -eq 0 ];then
                 $httpdir/bin/apachectl  stop
             fi
         fi
         ;;
    restart)
         VarVerification
         $httpdir/bin/apachectl restart
         if [ $? -eq 0 ] ;then
             pidfile
         else   
             mv $httpdir/httpd.pid /tmp
         fi
         ;;
    status)
         VarVerification
         if [ -f $httpdir/httpd.pid ];then
             echo  "Apache service is running..."
         else
             echo "Apache service is DOWN!"
         fi
    esac有了上面的脚本,幷放置于/etc/init.d下,执行:
    [root init.d]# chkconfig --add httpd   #接受chkconfig的支配
                    chkconfig --del httpd   #不再接受chkconfig的支配
                    chkconifg --level 2345 httpd on  #指定2345模式下开机自启动
    [root init.d]# service httpd start     #启动apache服务验证一下效果80端口已启动:
    [root init.d]# netstat -ntl
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State            
    tcp        0      0 :::80                       :::*                        LISTEN
    [root init.d]# service httpd {stop|start|restart|status} 停止,启动,重启,状态

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-450506-1-1.html 上篇帖子: centos6.8单机安装HBase 下篇帖子: centos7 的iscsi网络存储配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表