精华内容
下载资源
问答
  • service文件
    千次阅读
    2021-12-02 17:02:25

    1. 什么是.service文件?

    Linux中.service文件是某项服务对应的配置文件,可用于systemd管理和控制的服务的设置。
    
    .service 文件通常包含3个模块,
        即[Unit]控制单元,表示启动顺序和依赖关系;
        [Service]服务,表示服务的定义;
        [Install]安装,表示如何安装配置文件。
    复制代码
    

    2. 文件存放位置

    .service 文件配置的服务常用systemd管理。然而,systemd有系统和用户区分;
    系统(/user/lib/systemd/system/)、
    用户(/etc/lib/systemd/user/)。
    一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。
    复制代码
    

    3. 创建.service 文件

    以httpd.service 为例
    复制代码
    [Unit]     				
    Description=httpd	    #当前配置文件的描述信息
    After=network.target        #表示当前服务是在那个服务后面启动,一般定义为网络服务启动后启动
    
    [Service]				
    Type=forking			                        #定义启动类型
    ExecStart=/usr/local/apache/bin/apachectl start 	#定义启动进程时执行的命令。
    ExecReload=/usr/local/apache/bin/apachectl restart      #重启服务时执行的命令
    ExecStop=/usr/local/apache/bin/apachectl stop		#定义关闭进程时执行的命令。
    PrivateTmp=true						#是否分配独立空间
    
    [Install]
    WantedBy=multi-user.target    #表示多用户命令行状态
    
    复制代码
    

    4. [Unit]字段介绍 ——主要给出服务描述、启动顺序和依赖关系

    Description:当前服务的简单描述。\
    
    Documentation:服务文档\
    
    After和Before:表示启动顺序,不涉及依赖关系。Before=xxx.service表示本服务在xxx.service 启动之前启动,
    After=yyy.service表示本服务在yyy.service 之后启动。\
    
    Wants:表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。\
    
    Requires:表示”强依赖”关系,即某服务停止运行或退出,改服务也必须停止运行。\
    
    Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
    复制代码
    

    4. [Service]字段介绍——服务的启动行为以及如何启动、重启、停止等信息

    Type=simple(默认值):systemd认为该服务将立即启动。
    服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。\
    
    Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。
    对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。
    使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。\
    
    Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。
    可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
    Type=oneshot允许指定多个希望顺序执行的用户自定义命令。\
    
    Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。
    这一通知的实现由 libsystemd-daemon.so 提供。\
    
    Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。\
    
    Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。
    除此之外,其他行为和Type=simple 类似。\
    
    PIDFile:pid文件路径
    
    ExecStart:指定启动单元的命令或者脚本,
    ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。
    
    ExecReload:指定单元重启时执行的命令或者脚本。
    
    ExecStop:指定单元停止时执行的命令或者脚本。
    
    PrivateTmp:True表示给服务分配独立的临时空间
    
    Restart:这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。
    
    RemainAfterExit:如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,
    默认的值为假,这个选项只有在Type=oneshot时需要被配置。
    
    User:字段可以设置服务的用户名
    
    WorkingDirectory:字段指定服务的安装目录
    复制代码
    

    4. [Install]字段介绍——何安装这个配置文件,即怎样做到开机自启

    Alias:为单元提供一个空间分离的附加名字。\
    
    RequiredBy:单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息。\
    
    Also:指出和单元一起安装或者被协助的单元。\
    
    DefaultInstance:实例单元的限制,这个选项指定如果单元被允许运行默认的实例。\
    
    WantedBy字段:表示该服务所在的 Target。\
    
    Target的含义是服务组,表示一组服务。\
    
    WantedBy=multi-user.target指的是服务所在的Target是multi-user.target
    Systemd 有默认的启动 Target就是multi-user.target,在这个组里的所有服务,都将开机启动。
    
    更多相关内容
  • linux中systemctl命令理解以及.service文件参数解析一、systemctl介绍二、利用.service文件管理程序的步骤三、.service配置文件参数详解1. Unit2. Service3. Install四、systemctl命令详解四、参考 一、systemctl...

    一、systemctl介绍

    Systemctl是linux系统继init.d之后的一个systemd工具,主要负责控制systemd系统和管理系统服务

    systemd即为system daemon(系统守护进程),是linux下的一种init软件。

    Systemd 可以管理所有系统资源:将系统资源划分为12类,将每个系统资源称为一个 Unit,12类包括Service、Target、Device等,其中.service是最常见的单元文件。Unit 是 Systemd 管理系统资源的基本单位。使用一个 Unit File 作为 Unit 的单元文件,Systemd 通过单元文件控制 Unit 的启动。

    有时我们将自定义程序注册为systemd service(服务进程管理),交由系统管理,可以方便启动停止,亦可以实现服务异常退出重启,开机自启动,减少自定义程序服务管理的时间消耗。

    二、利用.service文件管理程序的步骤

    1. 参考后面的参数详解部分,根据需求创建一个systemd unit 配置文件,如下的ehr.service:
    [Unit]
    Description=ehr service
    PartOf=ehp.service
     
    [Service]
    Type=simple
    User=root
    Restart=on-failure
    ExecStart=/bin/bash -c "export ROS_DOMAIN_ID=50 && source /opt/ros/galatic/setup.bash && source /home/igs/EHR/install/setup.bash && bash /home/igs/EHR/install/ehr/ehr/script/run.sh "
      
    [Install]
    WantedBy=multi-user.target
    
    1. 用sudo cp ehr.service /lib/systemd/system/ehr.service 命令将该单元文件拷到/lib/systemd/system/下,不直接在该目录下创建,是因为我们没有在该目录下编辑文件的权限,需要在外面编辑好后再拷过来。
      注意: /lib/systemd/system/ or /usr/lib/systemd/system/ 都可以。
    2. 参考后面的命令详解部分进行单元文件的操作。

    三、.service配置文件参数详解

    需要开机不登陆就能运行的程序的systemctl脚本,存在系统服务里,即:/usr/lib/systemd/system/或/lib/systemd/system/目录下. 不需开机就登录的程序的脚本存放在:/usr/lib/systemd/user。
    每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],各自的参数含义如下:

    1. Unit

    所有 Unit 文件通用, 该部分主要是对这个服务的说明,以及配置与其他服务的关系。
    参数详解如下:

    1. Description : 一段描述这个 Unit 文件的文字,通常只是简短的一句话。

    2. Documentation:指定服务的文档,可以是一个或多个文档的URL路径。

    3. Requires:依赖的其他 Unit 列表,列在其中的 Unit 模块会在这个服务启动的同时被启动,并且如果其中有任意一个服务启动失败,这个服务也会被终止

    4. After:与 Requires 相似,但会在后面列出的所有模块全部启动完成以后,才会启动当前的服务。

    5. Before:与 After 相反,在启动指定的任一个模块之前,都会首先确保当前服务已经运行。
      注意:Before=, After= 是配置服务间的启动顺序,比如一个 foo.service 包含了一行 Before=bar.service,那么当他们同时启动时,bar.service 会等待 foo.service 启动完成后才启动。注意这个设置和 Requires= 的相互独立的,同时包含 After= 和 Requires= 也是常见的。此选项可以指定多次,然后按顺序全部启动

    6. Wants:与 Requires 相似,但只是在被配置的这个 Unit 启- 动时,触发启动列出的每个 Unit 模块,而不去考虑这些模块启动是否成功。

    7. Conflicts:与这个模块有冲突的模块,如果列出模块中有已经在运行的,这个服务就不能启动,反之亦然。
      注意:如果这里列出的服务启动,那么本服务就会停止,反之亦然 ,即后启动的才起作用。注意,此设置和 After= 和 Before= 是互相独立的。

    8. OnFailure:当这个模块启动失败时,就自动启动列出的每个模块。

    9. PartOf :该参数仅作用于单元的停止或重启。其含义是,当停止或重启这里列出的某个单元时, 也会同时停止或重启该单元自身。 注意,这个依赖是单向的, 该单元自身的停止或重启并不影响这里列出的单元。如果 a.service 中包含了 PartOf=b.service ,那么这个依赖关系将在 b.service 的属性列表中显示为 ConsistsOf=a.service 。 也就是说,不能直接设置 ConsistsOf= 依赖。

    10. @ : Linux 上配置过 openvpn 的同学应该都看到过一些 openvpn@client.service 这样的例子:
      若需在系统启动时自动启动 OpenVPN,对服务器端与客户端,都可以采用在对应机器上 启用 openvpn@.service 的方式配置。例如,如果客户端配置文件是 /etc/openvpn/client.conf,则服务名称应为 openvpn@client.service。或者,如果服务器端配置文件是 /etc/openvpn/server.conf,则服务名称应为 openvpn@server.service。(systemd 常用操作及配置 | Yiran’s Blog

    2. Service

    Service 段是服务(Service)类型的 Unit 文件(后缀为 .service)特有的,用于定义服务的具体管理和执行动作,参数详解如下:

    1. Type
      设置进程的启动类型。必须设为 simple, exec, forking, oneshot, dbus, notify, idle 之一,默认的 simple 类型可以适应于绝大多数的场景,因此一般可以忽略这个参数的配置。而如果服务程序启动后会通过 fork 系统调用创建子进程,然后关闭应用程序本身进程的情况,则应该将 Type 的值设置为 forking,否则 systemd 将不会跟踪子进程的行为,而认为服务已经退出。其他类型说明见文章附录

    2. Environment: 为服务添加环境变量

    3. EnvironmentFile:指定加载一个包含服务所需的环境参数的文件,文件中的每一行都是一个环境变量的定义。

    4. ExecStart:这个参数是几乎每个 .service 文件都会有的,指定服务启动的主要命令,在每个配置文件中只能使用一次。需要使用绝对路径

    5. ExecStartPre:指定在启动执行 ExecStart 的命令前的准备工作,可以有多个,所有命令会按照文件中书写的顺序依次被执行。

    6. ExecStartPost: 指定在启动执行 ExecStart 的命令后的收尾工作,也可以有多个。

    7. ExecStop: 停止服务所需要执行的主要命令。需要使用绝对路径

    8. ExecStopPost:指定在 ExecStop 命令执行后的收尾工作,也可以有多个。

    9. ExecReload:重新加载服务文件所需执行的主要命令。需要使用绝对路径

    10. Restart:这个值用于指定在什么情况下需要重启服务进程,这些不同的值分别表示了在哪些情况下,服务会被重新启动,如下:
      在这里插入图片描述
      no(默认值):退出后不会重启
      always:除了用systemctl stop 或等价的服务停止操作命令,其他情况都可以重启
      on-success:只有正常退出时(退出状态码为0),才会重启
      on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启(守护进程,推荐值)
      on-abnormal:只有被信号终止和超时,才会重启(对于允许发生错误退出的服务,推荐值)
      on-abort:只有在收到没有捕捉到的信号终止时,才会重启
      on-watchdog:超时退出,才会重启

    11. RestartSec: 如果服务需要被重启,这个参数的值为服务被重启前的等待秒数。注意,该重启等待时间只针对上面Restart的参数值起作用时的重启才有效,比如说:因Unit段配置的关系或者人为使用systemctl restart命令导致该服务重启时,该参数无效,会马上重启

    12. Nice:服务的进程优先级,值越小优先级越高,默认为0。-20为最高优先级,19为最低优先级。

    13. WorkingDirectory:指定服务的工作目录。

    14. RootDirectory:指定服务进程的根目录( / 目录),如果配置了这个参数后,服务将无法访问指定目录以外的任何文件。

    15. User:指定运行服务的用户,会影响服务对本地文件系统的访问权限。可使用root

    16. Group:指定运行服务的用户组,会影响服务对本地文件系统的访问权限。

    17. PrivateTmp:是否给服务分配独立的临时空间(true/false)

    3. Install

    Install段是服务的安装信息,它不在 systemd 的运行期间使用,只在使用 systemctl enable 和 systemctl disable 命令启用/禁用服务时有用,所有 Unit 文件通用,用来定义如何启动,以及是否开机启动,参数详解如下:

    1. WantedBy:它的值是一个或多个 target,执行enable命令时,符号链接会放入/etc/systemd/system目录下以
      target 名 + .wants后缀构成的子目录中。“WantedBy=multi-user.target” 表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。当然还需要 systemctl enable 激活这个服务以后自动运行才会生效

    2. RequiredBy:依赖当前服务的模块。它的值是一个或多个 target,执行enable命令时,符号链接会放入/etc/systemd/system目录下以 target 名 + .required后缀构成的子目录中

    3. Alias:当前 Unit 可用于启动的别名

    4. Also:当前 Unit 被 enable/disable 时,会被同时操作的其他 Unit

    四、systemctl命令详解

    
    #当新增或修改service单元文件时,需要系统重新加载所有修改过的配置文件
    systemctl daemon-reload
    
    #设置为开机自启动
    systemctl enable ehr.service
    
    #关掉开机启用
    systemctl disable ehr.service
    
    #启动服务
    systemctl start ehr.service
    
    #重启服务,相当于先stop,再start
    systemctl restart ehr.service
    
    #关闭服务,关闭服务后,进程会全部被kill掉
    systemctl stop ehr.service
    
    #查看服务的状态
    systemctl status ehr.service
    
    #查看服务是否开机启动
    systemctl is-enabled ehr.service
    
    #查看已启动的服务列表
    systemctl list-unit-files|grep enabled
    #
    显示所有已启动的服务
    systemctl list-units --type=service
    
    #查看启动失败的服务列表
    systemctl --failed
    
    # 杀死一个服务的所有子进程
    systemctl kill ehr.service
    
    # 重新加载一个服务的配置文件
    systemctl reload ehr.service
    
    #移除标记为丢失的 Unit 文件。在删除 Unit 文件后,由于缓存的关系,
    #即使通过 daemon-reload 更新了缓存,在 list-units 中依然会显示标记为 not-found 的 Unit
    systemctl reset-failed ehr.service
    
    

    四、参考

    若在本文中未提及的参数及命令可以参考如下文章,非常详细的讲解systemctl单元文件的全部参数以及命令

    linux 使用systemctl start xxx启动自己的程序|开机启动|守护进程
    systemctl设置自己的systemd.service服务设置守护进程

    展开全文
  • linux 之.service文件简介

    千次阅读 2021-11-18 16:04:35
    linux 之.service文件简介 什么是.service文件? Linux中.service文件是某项服务对应的配置文件,可用于systemd管理和控制的服务的设置。 .service 文件通常包含3个模块,即[Unit]控制单元,表示启动顺序和依赖...

    linux 之.service文件简介

    1. 什么是.service文件?

      Linux中.service文件是某项服务对应的配置文件,可用于systemd管理和控制的服务的设置。

      .service 文件通常包含3个模块,即[Unit]控制单元,表示启动顺序和依赖关系;[Service]服务,表示服务的定义;[Install]安装,表示如何安装配置文件。

    2. 文件存放位置

      .service 文件配置的服务常用systemd管理。然而,systemd有系统和用户区分;系统(/user/lib/systemd/system/)、用户(/etc/lib/systemd/user/)。一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。

    3. 创建.service 文件

      以httpd.service 为例

    [Unit]     				
    Description=httpd	    #当前配置文件的描述信息
    After=network.target    #表示当前服务是在那个服务后面启动,一般定义为网络服务启动后启动
    
    [Service]				
    Type=forking			#定义启动类型
    ExecStart=/usr/local/apache/bin/apachectl start 	#定义启动进程时执行的命令。
    ExecReload=/usr/local/apache/bin/apachectl restart  #重启服务时执行的命令
    ExecStop=/usr/local/apache/bin/apachectl stop		#定义关闭进程时执行的命令。
    PrivateTmp=true										#是否分配独立空间
    
    [Install]
    WantedBy=multi-user.target    #表示多用户命令行状态
    
    1. [Unit]字段介绍 ——主要给出服务描述、启动顺序和依赖关系

      Description:当前服务的简单描述。
      Documentation:服务文档
      After和Before:表示启动顺序,不涉及依赖关系。Before=xxx.service表示本服务在xxx.service 启动之前启动,After=yyy.service表示本服务在yyy.service 之后启动。
      Wants:表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。
      Requires:表示”强依赖”关系,即某服务停止运行或退出,改服务也必须停止运行。
      Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。

    2. [Service]字段介绍——服务的启动行为以及如何启动、重启、停止等信息

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

      ExecStart:指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。ExecReload:指定单元停止时执行的命令或者脚本。

      ExecStop:指定单元停止时执行的命令或者脚本。

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

      Restart:这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。

      RemainAfterExit:如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,默认的值为假,这个选项只有在Type=oneshot时需要被配置。

      User字段可以设置服务的用户名

      WorkingDirectory字段指定服务的安装目录

    3. [Install]字段介绍——何安装这个配置文件,即怎样做到开机自启

      Alias:为单元提供一个空间分离的附加名字。
      RequiredBy:单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息。
      Also:指出和单元一起安装或者被协助的单元。
      DefaultInstance:实例单元的限制,这个选项指定如果单元被允许运行默认的实例。
      WantedBy字段:表示该服务所在的 Target。
      Target的含义是服务组,表示一组服务。
      WantedBy=multi-user.target指的是服务所在的Target是multi-user.target

      Systemd 有默认的启动 Target就是multi-user.target,在这个组里的所有服务,都将开机启动。

    #查看 multi-user.target 包含的所有服务
    systemctl list-dependencies multi-user.target
    
    1. 其它配置文件

      如果工程文件需要debian编包,需要在debian文件夹中的install文件中写入.service文件的安装路径,一般放在/usr/lib/systemd/system路径下。同时,如果需要开机自启动,在postinst文件中写入systemctl enable service_name.service。

    [参考链接]
    https://blog.csdn.net/a913909626/article/details/118405378
    https://www.cnblogs.com/q149072205/p/11541693.html
    感谢!

    展开全文
  • Linux中systemd的service文件说明

    千次阅读 2021-03-14 01:38:04
    历史版本中的linux对服务的操作是通过service来完成的。...一般系统管理员手工创建的单元文件(service文件)建议存放在/etc/systemd/system/目录下面。 二、内容介绍 service脚本分为3个部分:[Unit] [Serv

    历史版本中的linux对服务的操作是通过service来完成的。若创建用户自定义的服务,则需要较为复杂的操作。目前linux新的发行版已经内置了systemctl来操作服务。

    一、systemd有系统和用户区分

    系统(/user/lib/systemd/system/)
    用户(/etc/lib/systemd/user/)
    一般系统管理员手工创建的单元文件(service文件)建议存放在/etc/systemd/system/目录下面。

    二、内容介绍

    service脚本分为3个部分:[Unit] [Service] [Install]。

    1.[Unit] 区块:启动顺序与依赖关系。
    Unit区块的Description字段给出当前服务的简单描述,Documentation字段给出文档位置。
    接下来的设置是启动顺序和依赖关系,这个比较重要。
    After字段:表示如果network.target或sshd-keygen.service需要启动,那么sshd.service应该在它们之后启动。
    相应地,还有一个Before字段,定义sshd.service应该在哪些服务之前启动。
    注意,After和Before字段只涉及启动顺序,不涉及依赖关系。
    举例来说,某 Web 应用需要 postgresql 数据库储存数据。在配置文件中,它只定义要在 postgresql 之后启动,而没有定义依赖 postgresql 。上线后,由于某种原因,postgresql 需要重新启动,在停止服务期间,该 Web 应用就会无法建立数据库连接。
    设置依赖关系,需要使用Wants字段和Requires字段。
    Wants字段:表示sshd.service与sshd-keygen.service之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响sshd.service继续执行。
    Requires字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service也必须退出。
    注意,Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
    2.[Service] 区块:启动行为

    Service区块定义如何启动当前服务。
    2.1 启动命令
    许多软件都有自己的环境参数文件,该文件可以用EnvironmentFile字段读取。
    EnvironmentFile字段:指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取。
    上面的例子中,sshd 的环境参数文件是/etc/sysconfig/sshd。
    配置文件里面最重要的字段是ExecStart。
    ExecStart字段:定义启动进程时执行的命令。
    上面的例子中,启动sshd,执行的命令是/usr/sbin/sshd -D O P T I O N S , 其 中 的 变 量 OPTIONS,其中的变量 OPTIONSOPTIONS就来自EnvironmentFile字段指定的环境参数文件。
    与之作用相似的,还有如下这些字段。
    · ExecReload字段:重启服务时执行的命令
    · ExecStop字段:停止服务时执行的命令
    · ExecStartPre字段:启动服务之前执行的命令
    · ExecStartPost字段:启动服务之后执行的命令
    · ExecStopPost字段:停止服务之后执行的命令

    请看下面的例子。

    [Service]
     
    ExecStart=/bin/echo execstart1
    ExecStart=
    ExecStart=/bin/echo execstart2
    ExecStartPost=/bin/echo post1
    ExecStartPost=/bin/echo post2
    

    上面这个配置文件,第二行ExecStart设为空值,等于取消了第一行的设置,运行结果如下。

    execstart2

    post1

    post2

    所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。

    2.2 启动类型

    Type字段定义启动类型。它可以设置的值如下。

    · simple(默认值):ExecStart字段启动的进程为主进程
    · forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
    · oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
    · dbus:类似于simple,但会等待 D-Bus 信号后启动
    · notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
    · idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
    下面是一个oneshot的例子,笔记本电脑启动时,要把触摸板关掉,配置文件可以这样写。

    [Unit]
    Description=Switch-off Touchpad
     
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/touchpad-off
     
    [Install]
    WantedBy=multi-user.target
    

    上面的配置文件,启动类型设为oneshot,就表明这个服务只要运行一次就够了,不需要长期运行。

    如果关闭以后,将来某个时候还想打开,配置文件修改如下。

    [Unit]
    Description=Switch-off Touchpad
     
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/touchpad-off start
    ExecStop=/usr/bin/touchpad-off stop
    RemainAfterExit=yes
     
    [Install]
    WantedBy=multi-user.target
    

    上面配置文件中,RemainAfterExit字段设为yes,表示进程退出以后,服务仍然保持执行。这样的话,一旦使用systemctl stop命令停止服务,ExecStop指定的命令就会执行,从而重新开启触摸板。

    2.3 重启行为

    Service区块有一些字段,定义了重启行为。

    KillMode字段:定义 Systemd 如何停止 sshd 服务。

    上面这个例子中,将KillMode设为process,表示只停止主进程,不停止任何sshd 子进程,即子进程打开的 SSH session 仍然保持连接。这个设置不太常见,但对 sshd 很重要,否则你停止服务的时候,会连自己打开的 SSH session 一起杀掉。

    KillMode字段可以设置的值如下。

    · control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
    · process:只杀主进程
    · mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
    · none:没有进程会被杀掉,只是执行服务的 stop 命令。
    接下来是Restart字段。

    Restart字段:定义了 sshd 退出后,Systemd 的重启方式。

    上面的例子中,Restart设为on-failure,表示任何意外的失败,就将重启sshd。如果 sshd 正常停止(比如执行systemctl stop命令),它就不会重启。

    Restart字段可以设置的值如下。
    · no(默认值):退出后不会重启
    · on-success:只有正常退出时(退出状态码为0),才会重启
    · on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
    · on-abnormal:只有被信号终止和超时,才会重启
    · on-abort:只有在收到没有捕捉到的信号终止时,才会重启
    · on-watchdog:超时退出,才会重启
    · always:不管是什么退出原因,总是重启
    对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。

    最后是RestartSec字段。

    RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。上面的例子设为等待42秒。

    3.[Install] 区块
    Install区块,定义如何安装这个配置文件,即怎样做到开机启动。
    WantedBy字段:表示该服务所在的 Target。
    Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,sshd 所在的 Target 是multi-user.target。
    这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

    Systemd 有默认的启动 Target。

    $ systemctl get-default
    multi-user.target
    

    上面的结果表示,默认的启动 Target 是multi-user.target。在这个组里的所有服务,都将开机启动。这就是为什么systemctl enable命令能设置开机启动的原因。

    使用 Target 的时候,systemctl list-dependencies命令和systemctl isolate命令也很有用。

    # 查看 multi-user.target 包含的所有服务
    
    $ systemctl list-dependencies multi-user.target
    
    # 切换到另一个 target
    
    # shutdown.target 就是关机状态
    
    $ sudo systemctl isolate shutdown.target
    

    一般来说,常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。官方文档有一张非常清晰的 Target 依赖关系图。

    后续会补充具体各种变量相关内容。
    参考自:
    Centos7之Systemd(Service文件)详解
    在linux下创建自定义服务

    展开全文
  • Linux新手入门系列:systemctl服务service文件配置详解
  • Linux中service文件详解

    千次阅读 2021-07-02 09:34:50
    systemd service是一种以 .service 结尾的配置文件,是一个专用于 Linux 操作系统的系统与服务管理器。简单来说,用于后台以守护精灵(daemon)的形式运行程序。 systemd 服务的内容主要分为三个部分,控制单元 ...
  • Linux添加自定义服务(service文件

    千次阅读 2021-05-23 16:32:00
    Linux系统中也有“服务”这一说法,通过服务我们可以便捷地管理一些程序功能,也可以作为程序开机自启的一个手段之一...在这个目录下新建service文件即可创建我们的服务。文件的内容结构如下: [Unit] Description=服
  • mysql 5.7 的 mysqld.service 文件

    千次阅读 2020-02-24 17:21:27
    使用 yum 安装 mysql server 后的 /usr/lib/systemd/system/mysqld.service 内容如下 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. # # This program is...
  • springboot通用管理脚本 在springboot打包成jar包之后,往往需要很多启动参数辅助服务启动,为了避免每次都写很长的启动命令,可以将...# 环境配置文件,如application-dev.yml PROFILE=dev JAR_NAME=$APP_NAME\.jar...
  • Centos7之Systemd(Service文件)详解

    万次阅读 2018-11-16 09:23:16
    对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 $ sudo systemctl enable httpd ...
  • Systemd service文件中配置环境变量

    千次阅读 2019-10-28 17:21:09
    Systemd service文件中配置环境变量 问题描述:Systemd 是所有服务的父进程,/etc/profile等配置的环境变量对其无效 官方告诉可以使用Environment以及EnvironmentFile为服务进程配置环境变量 *.service ...
  • 编写systemd service文件

    万次阅读 多人点赞 2015-06-28 14:52:49
    本教程简单的描述了如何从零开始编写一个 Systemd 服务文件、SysV init 脚本到 Systemd Service 文件的转换、以及一些后续学习的资源类内容。关于 Systemd 服务的使用,请见管理 Systemd,服务的自动启动以及服务...
  • vim /lib/systemd/system/nginx.service [Unit]Description=nginxAfter=network.target [Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop....
  • Systemd及service文件解析

    千次阅读 2016-09-27 17:19:42
    Systemd及service文件解析   Systemd是linux下的一款系统和服务管理器,兼容SysV和LSB的启动脚本。Systemd的特征有:支持并行化任务;同时采用socket式与D-Bus总线式激活服务;按需启动守护进程(daemon);利用...
  • 1) 在/etc/systemd/system/目录创建单元文件,并且保证只能被root用户编辑: vim /etc/systemd/system/svn.service chmod 664 /etc/systemd/system/svn.service 其中,“svn.service”是我们自定义的服务单元文
  • [Unit] Description= #服务描述 After=syslog.target #...[Service] Type=forking #服务启动类型 可选类型有simple forking Environment="LD_LIBRARY_PATH=path" #设置变量 ExecStart= #启动命令 ExecStop= ...
  • Linux Service配置文件的编写

    千次阅读 2020-10-11 15:04:39
    通过编写Service配置文件,可以使用Linux的 systemctl 命令来达到管理服务的启动、自启动、停止 特定脚本、进程。 编写方法: 文件命名:xxxx.service [Unit] Description=Frp Server Service #服务的描述信息 ...
  • Ubuntu:systemd的.service服务文件配置

    千次阅读 2022-02-05 21:54:51
    Ubuntu:.service文件配置前言.service文件UnitServiceInstall 前言 之前在Jetson Nano配置中记录了通过服务开机自启动JupyterLab。本篇记录一下.service服务文件的配置方法。 .service文件 上篇提到,systemd将载入...
  • 举例: a.service的配置文件定义: (Before=b.service) b.service的配置文件定义: (After=a.service and Before=c.service) c.service的配置文件定义: (After=b.service) a先启动,b再启动, ...
  • Tomcat的配置文件service.xml

    千次阅读 2019-03-02 15:00:43
    对于使用tomcat来说,配置是必不可少的,也是使用tomcat的基础,更是以后进行tomcat相关优化的必要...二、service.xml 一、每个配置文件的说明: 1. catalina.policy 包含由java Security Manager 实现的安全...
  • systemctl 针对 service 类型的配置文件

    千次阅读 2018-10-23 08:26:59
    systemctl 配置文件相关目录简介 systemctl 配置文件的设置项目简介 Sshd.services的配置文件   部分设置规则 ...【service】 【install】 tty相关   暂时启动tty8  ...
  • android通过Service进行文件下载,后台下载

    千次下载 热门讨论 2014-09-19 17:36:49
    android 通过Service进行文件的后台下载...
  • 不过在 systemd 环境下,根据服务是由 .socket 文件配置启动还是 .service 文件配置启动的不同,配置端口分别需要配置 sshd.socket 文件或依然是 sshd_config。 确认所用 sshd 服务 首先,我们需要确认系统所用的 ...
  • -bash: vi /lib/systemd/system/docker.service: 没有那个文件或目录、 原因: 命令里含中文 刚开始也是找了网上一堆解说 结果原因就是这么简单
  • 关于ubuntu创建service服务时找不到/...在大多数发行版 Linux 中想要添加自己的自定义服务,需要在 /usr/lib/systemd/system 目录下创建自定义的 .service 文件。但是,在 ubuntu 18.04 下,笔者却没能找到这个文件
  • ubuntu 服务(service)

    千次阅读 2020-05-20 18:48:06
    转载自:Ubuntu Service系统服务说明与使用方法 1.什么是ubuntu的service 可以粗略理解为:service(服务)是...可以看到最后那里有个ssh脚本,打开看一下,确实是脚本文件: 2.手动添加一个服务 基于上面的解释, 其实
  • centos7 卸载service服务

    千次阅读 2020-07-02 14:55:32
    如卸载logstash.service 1、查询服务 yum list | grep logstash 2、卸载 yum erase logstash.noarch
  • Ubuntu18.04添加自启动Service

    万次阅读 2020-03-09 20:57:37
    ubuntu18.04压根就没有rc.local,而且很多发行版都推荐使用systemd而不是initd了。 1.准备好你的sh脚本文件 内容略过,就假设路径是/...进入/etc/systemd/system/,创建一个my.service文件,内容如下 [Unit] Descrip...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,833,993
精华内容 733,597
关键字:

service文件

友情链接: 贪吃蛇.zip