服务配置
每一个服务以.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-success
、on-failure
、on-abnormal
、on-abort
、on-watchdog
PIDFile
:指定pid文件的路径
- [Install]
WantedBy
:指定运行级别,WantedBy=multi-user.target