在 Linux 中将任何可执行文件作为服务运行

将任何可执行文件作为 Linux 服务运行

目录

以下是关于如何在 Linux 中使用 Systemd 将任意可执行文件配置为服务的说明。

linux cogs 上图是由 [Flux 1 dev 模型](https://flux1.dev “Flux 1 dev - text to image test) 生成的 AI 图像,代表了 Linux 的 DIY 风格。

Systemd

Systemd 是一些 Linux 发行版中的系统和服务管理器及初始化工具。

一些使用 Systemd 的流行发行版包括:

  • Ubuntu 16.04 或更新版本
  • Debian Jessie 或更新版本
  • Arch Linux
  • CentOS 7 / RHEL 7 或更新版本
  • Fedora 15 或更新版本

systemctl

systemctl 是一个用于控制 systemd 的命令行工具。

列出所有服务

要列出所有服务,请运行以下命令:

systemctl list-units --type=service

创建服务文件

导航到 systemd 服务目录并创建一个带有 .service 扩展名的新文件:

sudo nano /etc/systemd/system/your_service_name.service

配置服务文件:

将以下内容添加到文件中,并根据需要调整值:

[Unit]
Description=Your Service Description
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/your/executable/directory
ExecStart=/path/to/your/executable
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

保存并关闭文件。

延迟服务启动

如果你怀疑在服务启动过程中存在时间问题,可以考虑在服务配置中添加延迟:

[Service]
ExecStartPre=/bin/sleep 10

服务依赖

要配置服务依赖项:

在服务配置文件的 [Unit] 部分中添加以下指令:

使用 After= 指定应在你的服务之前启动的服务:

After=network.target other_service.service

使用 Requires= 定义硬依赖:

Requires=required_service.service

使用 Wants= 定义软依赖:

Wants=optional_service.service

重新加载 systemd 以识别新服务

sudo systemctl daemon-reload

检查服务依赖项

sudo systemctl list-dependencies your_service_name.service

启用服务以在启动时运行

sudo systemctl enable your_service_name.service

要验证服务是否设置为在启动时运行:

sudo systemctl is-enabled your_service_name.service

启动服务

sudo systemctl start your_service_name.service
# 或
sudo systemctl restart your_service_name.service

检查服务状态

如果出现问题,请检查 Linux 服务日志和状态:

sudo systemctl status your_service_name.service

sudo journalctl -u your_service_name.service

对于 Python 脚本

ExecStart=/path/to/conda/envs/my_env_name/bin/python /path/to/executable.py

评论

现在可以使用 systemctl 命令(如 startstoprestartstatus)来管理你的服务。

对于需要参数的可执行文件,请相应地修改服务文件中的 ExecStart 行。

例如,如果你需要运行一个 Java 应用程序,请在 ExecStart 行中使用完整的 Java 命令。

请记住根据 需要 调整文件权限和所有权,并确保可执行文件具有正确的执行权限。

使用 chkservice 控制 Systemd 服务

而不是执行以下命令:

sudo systemctl start some-serviceservice
# 或
sudo systemctl restart some-serviceservice

你可以使用一个轻量级的控制台 UI 工具:

sudo apt-get install chkservice

sudo chkservice

有用的链接