前言
之前在Jetson Nano配置中记录了通过服务开机自启动JupyterLab。本篇记录一下.service服务文件的配置方法。
.service文件
上篇提到,systemd将载入/etc/systemd/system/ 目录下的.service 服务,一般而言其结构如下:
[Unit]
...
[Service]
...
[Install]
...
其中,[Unit] 设置该服务与其它服务的启动顺序和依赖关系,[Service] 设置服务的具体内容和行为,[Install] 设置开机启动的方法。
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,如果被依赖服务启动失败或停止,本服务也会停止。
启动顺序与依赖关系无关,被依赖的服务与本服务可以同时启动。
配置项可选可不选。
Service
服务具体执行的方式
以下配置为例:
[Service]
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
EnvironmentFile :服务的参数文件,形成$OPTIONS; ExecStart,ExecStop 等:启动命令组,分别是服务启动时,停止时,重启时,启动前,启动后,停止后执行的命令; Type :服务启动类型。默认simple 表示ExecStart为主进程,notify 类似于simple ,启动结束后会发出通知信号。另外还有forking ,oneshot ,dbus ,idle 等类型; KillMode :服务停止类型,默认control-group 停止时杀死所有子进程,process 只杀主进程,none 只停止服务,不杀进程; Restart :服务重启类型,默认no 不重启,on-success 正常退出时重启,on-failure 非正常退出时重启,还有always ,on-abnormal ,on-abort 等; RestartSec :间隔多久重启服务。
多数配置项可不配置,ExecStart 一般要自行设置。
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 得到:
graphical.target
graphical.target又以multi-user.target为Requires和After关系,因此开机将自启动multi-user.target服务组。
此外,.target文件用于配置服务组,但只有Unit 字段。
|