很多时候在工作或者自己搭建服务的时候会遇到可能需要手动编写Systemed Service文件的情况,这里对Service文件编写进行解析,方便以后工作或生活中查阅,亦或者可以帮助到需要的人。
Service文件中包含三个区块,分别是[Unit]、[Service]、[Install],一般保存于/etc/systemed/system目录下,下面对每个区块及其内参数进行说明:
[Unit]该区块用于指定服务名称、服务文档、启动顺序、服务依赖等。
区块内参数及其作用: - Description:用于指定服务名称。
-
Documentation:用于指定服务文档,非必须项。
-
After:用于指定当前服务需要在那些服务启动后启动。
-
Before:用于指定当前服务需要在那些服务启动前启动。
-
Wants:用于指定哪些服务对于当前服务弱依赖,指定服务没有运行,不会影响当前服务执行。
-
Requires:用于指定哪些服务对于当前服务强依赖,指定服务没有运行,当前服务会启动失败。
-
BindsTo:与Requires类似,不同之处在于,指定服务停止运行,会导致当前服务停止运行。
-
Conflicts:指定服务与当前服务互斥运行,即指定服务不能与当前服务同时运行。
[Service]该区块用于指定服务启动行为。
区块内参数及其作用:
Type:用于指定服务启动类型。
子项参数解析:
- simple(默认值):ExecStart启动的进程为该服务主进程。
-
exec:与simple类似,不同之处在于,只有在该服务的主进程执行完成之后,systemd才认为该服务启动完成。 其他后继单元必须一直阻塞到此时间后才能继续启动。
-
forking:以fork()方式启动,启动时父进程将会退出,子进程将成为主进程。
-
oneshot:与simple类似,不同之处在于,只有在该服务的主进程退出之后,systemd才认为该服务启动完成,才能开始启动后继单元
-
dbus:类似于simple,区别在于会等待D-Bus信号后才启动。
-
notify:类似于simple,启动结束后会发出通知信号,然后systemd才会启动其他服务。
-
idle:类似于simple,区别是idle要等到其他任务都执行完,才会启动该服务。
子项参数结束
-
EnvironmentFile:用于指定当前服务的环境参数文件。
-
ExecStart:用于指定服务启动需要执行的命令。
-
ExecReload:用于指定服务重启需要执行的命令。
-
ExecStop:用于指定服务停止需要执行的命令。
-
ExecStartPre:用于指定服务启动前执行的命令。
-
ExecStartPost:用于指定服务启动后执行的命令。
-
ExecStopPost:用于指定服务停止后执行的命令。
-
PrivateTmp:用于设置服务启动时挂载私有的/tmp、/var/tmp目录,此行为的目的在于提高服务进程临时文件的安全性。
[Install]该区块用于指定服务的用户信息,此部分的参数只在systemctl enable和systemctl disable时生效。
区块内参数及其作用:
-
WantedBy:一个或多个 Target,当前服务enable时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中。
-
RequiredBy:一个或多个 Target,当前服务enable时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中。
-
Alias:用于指定当前服务可用于启动的别名。
-
Also:用于指定当前服务enable时,会被同时enable的其他服务。
=栗子==栗子==栗子==栗子==栗子==栗子==栗子==栗子==栗子=
Filename:nginxd.service
[Unit]
Description=nginx
Documentation=nginx.org/en/doc
After=network.target
Before=php.service
Wants=php.service
Requires=network.target
[Service]
Type=simple
EnvironmentFile=/etc/nginx/nginx.conf
ExecStart=/etc/nginx/sbin/nginx
ExecReload=/etc/nginx/sbin/nginx -s reload
ExecStop=/etc/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target