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(图形界面模式)。