1. 简述

        在Linux系统中,将应用以服务的方式启动意味着该应用会在系统启动时自动运行,且通常以某种方式在后台持续运行。

2. 服务启动脚本示例

[Unit]  

Description=MyApp Service  

Documentation=man:myapp(1)  

After=network.target  

Requires=network.target  

  

[Service]  

Type=simple  

ExecStart=/usr/local/bin/myapp  

Restart=always  

User=myappuser  

Group=myappgroup  

WorkingDirectory=/var/lib/myapp  

Environment=MYAPP_CONFIG=/etc/myapp/config.ini  

  

[Install]  

WantedBy=multi-user.target

3. 各字段含义及取值解释

[Unit] 部分

Description=MyApp Service

字段含义:对服务的简短描述。

取值:自由文本,通常描述服务的功能或名称。

Documentation=man:myapp(1)

字段含义:服务的文档位置。

取值:可以是手册页(man page)的引用,或者其他形式的文档链接。

After=network.target

字段含义:定义服务启动的顺序,表示本服务需要在哪些其他服务或目标之后启动。

取值:通常是一个或多个 systemd 单元的名称,如 network.target 表示网络服务。

注意,如果想在linux系统所有的服务和驱动都加载完毕再启动应用,那么可以设置为“After=multi-user.target”

Requires=network.target

字段含义:定义服务启动的依赖关系,表示如果列出的单元未能成功启动,则本服务也不会启动。

取值:依赖的 systemd 单元名称。

[Service] 部分

Type=simple

字段含义:定义服务的启动类型。

取值:simple(默认值,表示服务会立即启动并持续运行)、forking(表示服务会派生一个子进程然后退出,由 systemd 管理子进程)、dbus(表示服务会通过 D-Bus 激活)等。

ExecStart=/usr/local/bin/myapp

字段含义:定义服务启动时执行的命令。

取值:要执行的命令及其参数,这里是 /usr/local/bin/myapp。

Restart=always

字段含义:定义服务在何种情况下应该被重启。

User=myappuser

字段含义:以哪个用户的身份运行服务。

取值:系统中存在的用户名。

Group=myappgroup

字段含义:以哪个组的身份运行服务。

取值:系统中存在的组名。

WorkingDirectory=/var/lib/myapp

字段含义:服务运行前切换到的工作目录。

取值:目录的路径。

Environment=MYAPP_CONFIG=/etc/myapp/config.ini

字段含义:设置服务运行时的环境变量。

取值:变量名=值的格式,可以设置多个环境变量。

[Install] 部分

WantedBy=multi-user.target

字段含义:定义服务被哪些目标(target)所需要,通常用于指定服务的安装目标。

取值:通常是 systemd 的目标名称,如 multi-user.target(多用户模式)或 graphical.target(图形界面模式)。

04-18 17:59