服务配置

每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],就以nginx为例吧,具体内容如下:

[Unit]
Description=A test Service

[Service]


[Install]
WantedBy=multi-user.target

各项配置说明

  • [Unit]

点击展开

  • Description:对该服务的一个简要说明
  • Before/After:定义启动顺序,例子:Before=nginx.service,表示该服务需要在nginx启动之前启动
  • Documentation:帮助文档
  • Wants:建议同时启动某服务,比如:Wants=nginx.service 表示系统中最好启动nginx服务,但是即使不启动nginx,当前这个服务也没啥影响
  • Require:当前服务是需要哪个特定的服务的,比如:Require=nginx.service,这就表示当前服务是需要nginx服务,那么在启动当前这个服务的时候,会自动将nginx也启动起来;而且一旦发现nginx服务停止了,那么当前这个服务也就会自动停止
    【require无法指定启动次序,需要结合Before After来用,否则经常出现各种问题】
  • Conflicis:当一个服务启动的时候,会立刻停止与之相冲突的服务

  • [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认为服务就绪。
  • WorkingDirectory:项目的工作目录
  • ExecStart:指定如何启动服务(指定启动服务要执行的命令)

    • 如果服务类型是oneshot类型,那么可以直接写上他要执行命令即可,通常不能添加参数和选项
    • 如果服务类型不是oneshot类型,那么在写要执行的命令的时候,可以添加一些参数,比如指定选项、配置文件、用户等

    【如果要执行多个命令,那么多个命令之间用;分割,如果需要换行可以用 \ 来续行】

  • ExecStop:停止服务
  • ExecStartPre/ExecStartPost:指定在执行启动服务之前、之后要执行什么命令
  • TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
  • Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-successon-failureon-abnormalon-aborton-watchdog
  • PIDFile:指定pid文件的路径

  • [Install]
WantedBy:指定运行级别,WantedBy=multi-user.target
Last modification:June 25, 2024
If you think my article is useful to you, please feel free to appreciate