Ubuntu创建.service服务文件(systemd守护进程)

Posted by

转载自:https://blog.csdn.net/qq_41035283/article/details/122793745?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-122793745-blog-79575304.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-122793745-blog-79575304.pc_relevant_default&utm_relevant_index=5

1.Unit

[Unit]
Description=Explain The Service
Documention=
Before=a.service
After=b.target
Wants=c.service
Requires=d.service

Description:对该服务的描述;

Documention:说明文档;

Before:在a.service服务启动之前,启动本服务;

After:在b.target服务组启动后,再启动本服务;

Wants:若依赖于c.service,及时被依赖服务启动失败或停止,本服务仍然运行;

Requires:强依赖于d.service,如果被依赖服务启动失败或停止,本服务也会停止。

启动顺序与依赖关系无关,被依赖的服务与本服务可以同时启动。

配置项可选可不选。

2.Service:

服务具体执行的方式

[Service]
User=root
EnvironmentFile=/path_to_file
ExecStart=/your_script_dir/autoJupyterLab.sh $OPTIONS
ExecStop=
ExecReload=
ExecStartPre=
ExecStartPost=
ExecStopPost=
Type=simple
KillMode=process
Restart=on-failure
RestartSec=42s

EnvironmenFile:服务的参数文件,形成$OPTIONS;

ExecStart, ExecStop等:启动命令组,分别是服务启动时,停止时,重启时,启动前,启动后,停止后执行的命令;

Type:服务启动类型。默认simple标识ExecStart为主进程,notify类似于simple,启动结束后会发出通知信号。另外还厚forking(以fork方式从父进程创建子进程,创建后父进程会立即退出),oneshot(一次性进程,Systemd会等当前服务退出,再继续往下执行),dbus(当前服务通过D-Bus启动),idle(若有其他任务执行完毕,当前服务才会运行)等类型;

killMode:服务停止类型,默认control-group停止时杀死所有子进程,process只杀主进程,none只停止服务,不杀进程;

Restart:服务重启类型,默认no不重启,on-success正常退出是重启,on-failure非正常退出时重启,还有always,on-abnormal,on-abort等;

RestartSec:自动重启当前服务间隔的秒数

User:执行ExecStart命令的用户

ExecStartPre:启动当前服务之前执行的命令

ExecStartPost:启动当前服务之后执行的命令

ExecReload:重启当前服务时执行的命令

ExecStop:停止当前服务时执行的命令

ExecStopPost:停止当其服务之后执行的命令

WorkingDirectory:工作目录

3.Install:

把服务放在哪个服务组

[Install]
WantedBy=multi-user.target

WantedBy:服务所在的服务组。

multi-user.target服务组中的服务,在sudo systemctl enable xxx.service后,符号链接被放在/etc/systemd/system/multi-user.target.wants/目录下。而系统默认启动的Target可由sudo systemctl get-defaults得到:

# sudo systemctl get-defaults
graphical.target

graphical.target又以multi-user.target为Requires和After关系,因此开机将自启动multi-user.target服务组。

此外,.target文件用于配置服务组,但只有Unit字段。

完整配置距离:

[Unit]
Description=Xray Service
After=network.target nss-lookup.target

[Service]
User=root
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/local/bin/xray run -config /usr/local/etc/xray/config.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000

[Install]
WantedBy=multi-user.target

加载配置文件:

systemctl daemon-reload

然后我们就可以使用systemctl 命令来启动、停止、重启服务了

设置服务开机自启动:(启动xray.service)

systemctl enable xray

注:.service文件需要放在/etc/systemd/system/路径下,比如:/etc/systemd/system/xray.service