zoukankan      html  css  js  c++  java
  • 使用systemctl管理服务

    系统服务,开机不需要登录就能运行的程序(相当于开机自启)
    /usr/lib/systemd/system
    用户服务,需要登录后才能运行的程序
    /usr/lib/systemd/user 目录下又存在两种类型的文件:

         *.service      服务unit文件
         *.target        开机级别unit

    配置文件详解

        以下为Nginx启动脚本

    [Unit]
    Description=nginx - high performance web server
    Documentation=http://nginx.org/en/docs/
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    User=nginx
    Group=nginx
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    [Install]
    WantedBy=multi-user.target
    [Unit]
    Documentation    文档地址
    Description      简短描述
    Requires         当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
    Wants            与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
    BindsTo          与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
    Before           如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
    After            是指在那个服务后面启动,一般是网络服务启动后启动
    Conflicts        这里指定的 Unit 不能与当前 Unit 同时运行
    Condition...     当前 Unit 运行必须满足的条件,否则不会运行
    Assert...        当前 Unit 运行必须满足的条件,否则会报启动失败
    [Service]
    Type=forking           表示后台运行模式。
    User=user              设置服务运行的用户
    Group=user             设置服务运行的用户组
    Restart=always         总是重启
    RestartSec=1           重启等待的秒数
    PrivateTmp=true        表示给服务分配独立的临时空间
    Environment            指定环境变量
    PIDFile
    指定服务的PID文件 ExecStart 启动当前服务的命令 ExecStartPre 启动当前服务之前执行的命令 ExecStartPost 启动当前服务之后执行的命令 ExecReload 重启当前服务时执行的命令 ExecStop 停止当前服务时执行的命令 ExecStopPost 停止当其服务之后执行的命令 KillMode 当前控制组里的所有子进程,都会被杀掉

    EnvironmentFile=/etc/sysconfig/sshd
    以key=value的形式保存,以$key形式读取
    所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。
    EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使 /etc/sysconfig/sshd 文件不存在,也不会抛出错误。
    Environment:
    后面接多个不同的shell变量,例如:
    Environment=DATA_DIR=/data/elk
    Environment=LOG_DIR=/var/log/elasticsearch
    Environment=PID_DIR=/var/run/elasticsearch
    EnvironmentFile=-/etc/sysconfig/elasticsearch

    Type=simple       默认值,ExecStart字段启动的进程为主进程
         forking      ExecStart字段将以fork()方式启动
         oneshot      类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务,会使Exex* 后面的命令支持 BASH 语法。
         dbus         类似于simple,但会等待 D-Bus 信号后启动
         notify       类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
         idle         类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
    Restart=no           默认值退出后不会重启
            on-success   只有正常退出时(退出状态码为0),才会重启
            on-failure   非正常退出时(非0),包括被信号终止和超时,才会重启
            on-abnormal  只有被信号终止和超时,才会重启
            on-abort     只有在收到没有捕捉到的信号终止时,才会重启
            on-watchdog  超时退出,才会重启
            always       不管是什么退出原因,总是重启,但是不会重起 systemctl stop serviceName.service 命令停止后的服务。

     Exec* 后面接的命令,仅接受“指令 参数 参数..”格式,不能接受 < > | & 等特殊字符,很多bash语法也不支持。如果想支持 bash 语法,需要设置Tyep=oneshot 

    KillMode=control-group    默认,当前控制组里的所有子进程,都会被杀掉
             process          只杀主进程
             mixed            主进程将收到SIGTERM信号,子进程收到SIGKILL信号
             none             没有进程会被杀掉,只是执行服务的stop命令
    [Install]
    通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。
    WantedBy=multi-user.target    # 多用户
    WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中
    RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
    Alias:当前 Unit 可用于启动的别名
    Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit 
    WantedBy字段:
    WantedBy=multi-user.targe:    表示多用户命令行状态,这个设置很重要
             graphical.target     表示图形用户状体,它依赖于multi-user.target






    作者:Outsrkem
    出处:https://www.cnblogs.com/outsrkem/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    centos7 nfs安装
    Rasa在PyCharm中进行debug
    IOS的? !
    IOS中IndexPath
    移动端文本框点击后网页变大的解决办法
    h5 在全屏iphonex中的适配
    net5中得logging保存到文件中
    SQL SERVER 2000数据库置疑处理
    ILSpy源码下载后,编译不过的问题
    Tigase8.x 搭配Mysql8及以上启动时报错(Nodes redirection table: tig_cluster_nodes doesn't exits)的解决方法
  • 原文地址:https://www.cnblogs.com/outsrkem/p/11766267.html
Copyright © 2011-2022 走看看