• centos7 system自定义服务


     

    1.介绍

    • centos中service命令与/etc/init.d的关系

      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]

     

    2.示例

      这里以Mongo脚本示例,Mongo脚本由于自定义,本人有很多参数没有写,但是以下面示例的参数,足够控制服务了。

    [root@CentOS7 system]# cat /usr/lib/systemd/system/mongod.service 
    [Unit]
    Description=mongo
    After=network.target 
     
    [Service]
    Type=forking
    PIDFile=/usr/local/mongodb/tmp/mongod.pid
    ExecStart=/usr/local/mongodb/bin/mongod -f /etc/mongod.conf.bak
    ExecReload=/bin/kill -s HUP $MAINPID      #停止与重载写不写无所谓
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
     
    [Install]
    WantedBy=multi-user.target

    3.服务参数

    3.1 [Unit]

    Description : 服务的简单描述
    Documentation : 服务文档

    Before, After:定义启动顺序,Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx之后启动。

    Requires: 这个单元启动了,那么它“需要”的单元也会被启动; 它“需要”的单元被停止了,它自己也活不了。但是请注意,这个设定并不能控制某单元与它“需要”的单元的启动顺序(启动顺序是另外控制的),即 Systemd 不是先启动 Requires 再启动本单元,而是在本单元被激活时,并行启动两者。于是会产生争分夺秒的问题,如果 Requires 先启动成功,那么皆大欢喜; 如果 Requires 启动得慢,那本单元就会失败(Systemd 没有自动重试)。所以为了系统的健壮性,不建议使用这个标记,而建议使用 Wants 标记。可以使用多个 Requires。

    RequiresOverridable:跟 Requires 很像。但是如果这条服务是由用户手动启动的,那么 RequiresOverridable 后面的服务即使启动不成功也不报错。跟 Requires 比增加了一定容错性,但是你要确定你的服务是有等待功能的。另外,如果不由用户手动启动而是随系统开机启动,那么依然会有 Requires 面临的问题。

    Requisite:强势版本的 Requires。要是这里需要的服务启动不成功,那本单元文件不管能不能检测等不能等待都立刻就会失败。

    Wants:推荐使用。本单元启动了,它“想要”的单元也会被启动。但是启动不成功,对本单元没有影响。

    Conflicts:一个单元的启动会停止与它“冲突”的单元,反之亦然。

     

    3.2 [Service]

    Type : 启动类型simple、forking、oneshot、notify、dbus

      • 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认为服务就绪。

    PIDFile : pid文件路径, pid文件,没有可以删除这行

    ExecStartPre :启动前要做什么,比如是测试配置文件

    ExecStart:启动 

      • --如果你服务的类型不是 oneshot,那么它只可以接受一个命令,参数不限。
      • --多个命令用分号隔开,多行用 \ 跨行。

    ExecReload:重载 

    ExecStop:停止 

    Restart:定义服务何种情况下重启(启动失败,启动超时,进程被终结)。可选选项:no, on-success, on-failure,on-watchdog, on-abort

    SuccessExitStatus:参考ExecStart中返回值,定义何种情况算是启动成功。eg:SuccessExitStatus=1 2 8 SIGKILL

    PrivateTmp:True表示给服务分配独立的临时空间

    Environment='JAVA_HOME=/usr/jdk1.7.0_72'  (设置环境变量)

     

    3.3 [Install]

    Alias:别名

    Also(可选):当目前这个 unit 本身被 enable 时,Also 后面接的 unit 也请 enable 的意思!也就是具有相依性的服务可以写在这里呢!

    WantedBy:何种情况下,服务被启用。eg:WantedBy=multi-user.target(多用户环境下启用)

     

    作者:小家电维修

    相见有时,后会无期。

  • 相关阅读:
    redis应用场景
    redis 持久化
    vue.jsv-if 的key值问题
    laravel 上线注意事项 (ubuntu lamp)
    laravel 不同表用户登录,后台跳转问题
    Laravel 5.5 不同用户表登录认证(前后台分离)
    记录laravel 数据填充问题
    Git 版本控制器详解
    Ubuntu Apache多站点配置
    Spring的注解@Qualifier小结
  • 原文地址:https://www.cnblogs.com/lizexiong/p/14650374.html
Copyright © 2020-2023  润新知