概述
Systemd 是 Linux 系统的一种初始化系统(init),主要负责控制系统的启动和运行,并提供了一种基于服务的管理机制。它取代了传统的 init 系统,成为现代 Linux 发行版的标准。
这里假设我需要为我的应用创建一个名字叫project-apps.service
的服务单元。
创建服务单元
1 | cat >/etc/systemd/system/project-apps.service <<EOF |
cat >
: 使用 cat 命令将后续内容写入文件。/etc/systemd/system/project-apps.service
: 指定文件路径,systemd 服务单元文件通常存放在 /etc/systemd/system/ 目录下。<<EOF ... EOF
: 使用 heredoc 语法,将多行内容写入文件,直到遇到 EOF 标记。
[Unit] 部分
1 | [Unit] |
Description
: 服务描述,显示为 Dcim Service,用于标识服务的用途。After=network.target
: 指定服务在 network.target(网络服务)启动后再启动,确保网络可用。
[Service] 部分
1 | [Service] |
ExecStart
: 指定服务启动时执行的命令 /usr/local/bin/project-apps。这意味着有一个可执行文件 project-apps 位于 /usr/local/bin/。Restart=always
: 如果服务因任何原因停止(例如崩溃),systemd 将自动重启服务。User=nobody
: 服务以 nobody 用户身份运行,这是一个低权限用户,用于提高安全性。Group=nogroup
: 服务以 nogroup 组身份运行,同样是为了限制权限。Environment
: 设置环境变量 PATH,确保服务可以找到 /usr/local/bin、/usr/bin 和 /bin 目录中的可执行文件。
[Install] 部分
1 | [Install] |
WantedBy=multi-user.target
: 指定服务在 multi-user.target(多用户模式,相当于系统启动到命令行环境)时启用。这是典型的非图形化服务的目标。
后续操作
1 | systemctl daemon-reload |
systemctl daemon-reload
: 通知 systemd 重新加载配置文件。因为我们刚刚创建或修改了 dcim.service 文件,此命令确保 systemd 识别新的服务定义。- 需要 sudo 权限,因为修改 systemd 配置是系统级操作。
1 | systemctl enable project-apps.service |
systemctl enable project-apps.service
: 启用服务,使其在系统启动时自动启动。systemctl restart project-apps.service
: 重新启动服务,确保配置生效。
另外,如果需要查看服务状态,可以使用以下命令:
1 | systemctl status project-apps.service |
希望查看服务日志,可以使用以下命令:
1 | journalctl -u project-apps.service |