暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CentOS6/7 配置守护进程

chester技术分享 2022-11-02
637

CentOS6.x

CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。

一、相关命令

通过initctl help可以查看相关命令

    [root@localhost ~]# initctl help
    Job commands:
    start Start job.
    stop Stop job.
    restart Restart job.
    reload Send HUP signal to job.
    status Query status of job.
    list List known jobs.


    Event commands:
    emit Emit an event.


    Other commands:
    reload-configuration Reload the configuration of the init daemon.
    version Request the version of the init daemon.
    log-priority Change the minimum priority of log messages from the init daemon
    usage Show job usage message if available.
    help display list of commands


    For more information on a command, try `initctl COMMAND --help'.

    二、自己配置一个

    在/etc/init/文件夹中新建一个testserver.conf配置文件。

    通过exec执行发布出来的程序可执行文件。通过设置respawn让程序反复启动。

      start on runlevel [2345]
      stop on runlevel [!2345]
      respawn
      exec usr/local/src/testserver/testserver

      然后启动

        initctl reload-configuration 
        initctl list
        initctl start testserver

        通过initctl list即可看程序是不是处于running启动状态。

          [root@localhost ~]# initctl list
          vmware-tools start/running
          rc stop/waiting
          tty (/dev/tty3) start/running, process 3024
          tty (/dev/tty2) start/running, process 3022
          tty (/dev/tty6) start/running, process 3033
          tty (/dev/tty5) start/running, process 3028
          tty (/dev/tty4) start/running, process 3026
          plymouth-shutdown stop/waiting
          testserver start/running, process 4157
          control-alt-delete stop/waiting
          rcS-emergency stop/waiting
          readahead-collector stop/waiting
          kexec-disable stop/waiting
          quit-plymouth stop/waiting
          rcS stop/waiting
          prefdm start/running, process 3017
          init-system-dbus stop/waiting
          ck-log-system-restart stop/waiting
          readahead stop/waiting
          ck-log-system-start stop/waiting
          splash-manager stop/waiting
          start-ttys stop/waiting
          readahead-disable-services stop/waiting
          ck-log-system-stop stop/waiting
          rcS-sulogin stop/waiting
          serial stop/waiting

          可以看到其处于启动状态,现在守护进程已经设置成功。

          另外,配置文件中可以通过script ... end script执行脚本。举个例子

            start on runlevel [2345]
            stop on runlevel [!2345]
            script
            echo “test~~~~~” >>/tmp/test.txt
            end script

            CentOS7.x

            Centos7中可以通过systemd配置守护进程。

            一、Unit的含义

            systemd可以管理所有系统资源,不同资源统称为 Unit,一共分为12种:

              Service unit:   系统服务
              Target unit: 多个unit构成一个组
              Device unit: 硬件设备
              Mount unit: 文件系统的挂载点
              Automount unit: 自动挂载点
              Path unit: 文件或路径
              Scope unit: 不是由Systemd启动的外部进程
              Slice unit: 进程组
              Snapshot unit: Systemd快照,可以切回某个快照
              Socket unit: 进程间通信的socket
              Swap unit: swap文件
              Timer unit: 定时器

              二、Unit管理常用命令(主要针对service)

                # 开机自启动
                systemctl enable nginx


                # 关闭自启动
                systemctl disable nginx


                # 服务状态
                systemctl status nginx


                # 服务重启
                systemctl restart nginx


                # 杀死一个服务
                systemctl kill nginx


                # 显示已启动的服务
                systemctl list-units --type=service

                 

                三、Unit配置文件

                每一个Unit都有一个配置文件,用于告诉系统如何启动Unit,systemd默认从 etc/systemd/system/ 目录读取配置文件,

                Unit配置文件目录主要有三个:

                  /lib/systemd/system
                  /run/systemd/system
                  /etc/systemd/system

                   

                  四、Unit服务配置

                  每个服务以.service后缀,一般会分为3部分:[Unit],[Service],[Install],具体以nginx服务为例:

                    [Unit]
                    Description=nginx - high performance web server
                    After=network.target remote-fs.target nss-lookup.target

                    [Service]
                    Type=forking
                    PIDFile=/usr/local/nginx/logs/nginx.pid
                    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c usr/local/nginx/conf/nginx.conf
                    ExecStart=/usr/local/nginx/sbin/nginx -c usr/local/nginx/conf/nginx.conf
                    ExecReload=/usr/local/nginx/sbin/nginx -s reload
                    ExecStop=/usr/local/nginx/sbin/nginx -s stop

                    #Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
                    Restart=on-failure
                    RestartSec=30

                    [Install]
                    WantedBy=multi-user.target

                    1、[Unit]区块

                    [Unit]区块通常是配置文件的第一个区块,用来定义Unit的元数据,以及配置与其他Unit的关系。

                      Description: 简短描述
                      Documentation: 文档地址
                      After:依赖,仅当依赖的服务启动之后再启动自定义的服务单元

                      2、[Service]区块

                      [Service]区块用来Service的配置,只有service类型的unit才有本区块。

                      Type: 定义启动时的进程行为。它有以下几种值:

                        Type=simple  :(默认值) systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是 socket 激活型。
                        Type=forking :systemd认为当该服务进程 fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。
                        使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。
                        Type=oneshot :这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
                        Type=notify :与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
                        Type=dbus :若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd 认为服务就绪。
                        Type=idle    :systemd 会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。

                        其他选项:

                          ExecStart:     启动服务的命令
                          ExecStartPre: 启动服务之前执行的命令
                          ExecStartPost: 启动服务之后执行的命令
                          ExecReload: 重启服务执行时的命令
                          ExecStop: 停止服务时执行的命令
                          ExecStopPost: 停止服务之后执行的命令
                          RestartSec: 自动重启服务间隔的秒数
                          Restart: 定义何种情况下会自动重启服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
                          TimeoutSec: 定义Systemd停止服务之前等待的秒数
                          Environment: 指定环境变量
                          PIDFile:pid文件路径
                          PrivateTmp:true表示给服务分配独立的临时空间
                          User:执行命令的用户
                          Group:执行命令的组

                          3、[Install]区块

                          [Install]区块用来定义如何启动,以及是否开机启动。

                            WantedBy:   它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .wants后缀构成的子目录中
                            RequiredBy: 它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .required后缀构成的子目录中
                            Alias: 当前Unit可用于启动的别名
                            Also: 当前Unit激活时(enable),会被同时激活的其他Unit

                            五、Target的概念

                            Target就是一个Unit组,包含许多相关Unit。启动某个Target的时候,Systemd就会启动里面所有的Unit。

                            传统init启动模式里面,有RunLevel的概念,跟Target的作用很类似。不同的是,RunLevel是互斥的,不可能多个RunLevel同时启动,但是多个Target可以同时启动。

                            Target的常用命令:

                              查看所有target下的unit
                              systemctl list-unit-files --type=target

                              查看默认target,即默认的运行级别。对应于旧的`runlevel`命令
                              systemctl get-default

                              设置默认的target
                              systemctl set-default multi-user.target

                              查看target下的unit
                              systemctl list-dependencies multi-user.target

                              切换target,不属于新target的unit都会被停止
                              systemctl isolate multi-user.target

                               

                              六、自己配置一个

                              /lib/systemd/system/目录中定义一个自己的testserver.service文件

                                [Unit]
                                Description=testserver


                                [Service]
                                # 应用程序所在的文件目录
                                WorkingDirectory=/usr/local/src/testserver/
                                ExecStart=/usr/local/src/testserver/testserver
                                Restart=always


                                # 如果服务崩溃,10秒后重新启动服务
                                RestartSec=10
                                KillSignal=SIGINT
                                SyslogIdentifier=testserver
                                User=root


                                # Production:生产环境 Development:开发环境
                                # Environment=ASPNETCORE_ENVIRONMENT=Development
                                [Install]
                                WantedBy=multi-user.target  # 由此target触发自启动


                                通过以下命令实现启动

                                  systemctl daemon-reload


                                  // 自动启动
                                  systemctl enable testserver.service


                                  //立即启动
                                  systemctl start testserver.service


                                  //状态查看
                                  systemctl status testserver.service

                                  关注我获取技术分享

                                  文章转载自chester技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论