• CentOS6/7 配置守护进程


     

    正文

    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
    复制代码

     

    部分摘自

    http://t.zoukankan.com/solohac-p-4154181.html

    https://www.cnblogs.com/jkko123/p/12171572.html

    C#/.net/.net core QQ群:953553560


                    
  • 相关阅读:
    Linux程序地址空间
    Python tests in.....
    使用Python进行音频处理
    js数组、对象、字符串常用方法
    实现数组的扁平化
    donut导出onnx模型
    手把手教你做个智能加湿器(一)
    JavaWeb面试
    python入门
    【QT】续写文本存储到文件
  • 原文地址:https://www.cnblogs.com/chenyishi/p/16848621.html