9 个版本

0.1.14 2023年11月11日
0.1.13 2023年10月23日
0.1.12 2023年9月3日
0.1.2 2023年8月8日

#108Unix API

Download history 261/week @ 2024-03-11 13/week @ 2024-04-01

83 每月下载量

MIT 许可证

58KB
957

servicer:简化systemd上的服务管理

Crates.io Crates.io License

servicer 是一款用户友好的命令行界面(CLI)工具,旨在简化systemd上的服务管理,抽象出systemd生态系统的复杂性。servicer提供易于使用的API,与pm2等流行工具类似,使用户能够轻松创建、控制和管理工作。

主要功能

  1. 直观的CLI:servicer提供简单直观的命令行界面,既适合初学者也适合经验丰富的用户。

  2. 创建服务:通过指定基本详情,如服务名称、命令、工作目录和环境变量,轻松创建和定义新服务。

  3. 控制服务:使用简单命令无缝启动、停止、重启、启用或禁用服务。

  4. 进程监控:监控服务的状态和健康,确保可靠运行,并在出现故障时自动重启。

  5. 服务日志:直接从终端查看实时服务日志,便于故障排除和调试。

  6. 跨平台兼容性:servicer设计用于在支持systemd的各种Linux发行版上工作。MacOS(launchd)和Windows(SCM)支持正在计划中。

目标

  1. 使用操作系统原生原语:与pm2不同,servicer不会创建进程也不会运行自定义日志记录器。它将您的应用程序连接到systemd,并让路。日志由journald处理。如果您对servicer发生错误,无需担心服务会中断。

  2. 轻量级:servicer是无守护进程的,即不在后台消耗资源。

  3. 语言无关:servicer是一个二进制可执行文件,无需安装rust。没有语言专有的功能,如pm2的Node集群模式,导致膨胀。

平台支持

目前servicer支持Linux。系统上必须安装systemd。计划支持MacOS(launchd)和Windows(SCM)。

如何安装它?

下载二进制文件

发布页面下载二进制文件,用于运行wget https://github.com/servicer-labs/servicer/releases/download/v0.1.2/servicer。然后按以下方式设置:

# grant permissions
chmod +rwx ./servicer

# Rename to ser and make it accessable from path
sudo mv ./servicer /usr/bin/ser

# Important- symlink to node. Node must be visible to sudo user
sudo ln -s $(which node) "/usr/local/bin/node"
sudo ln -s $(which npm) "/usr/local/bin/npm"

# This should work now
ser --help

Cargo

cargo install servicer

# Create a symlink to use the short name `ser`. We can now access servicer in sudo mode
sudo ln -s ~/.cargo/bin/servicer /usr/bin/ser

# Important- symlink to node. Node must be visible to sudo user
sudo ln -s $(which node) "/usr/local/bin/node"
sudo ln -s $(which npm) "/usr/local/bin/npm"

用法

运行--help以显示提示信息。请注意,大多数命令都需要sudo模式。

1. 创建服务

# Create a service for index.js
sudo ser create index.js

# Create service, start and enable on boot
sudo ser create index.js --start --enable

# Create a service for a binary
sudo ser create awesome-binary

# Custom interpreter
sudo ser create hello-typescript.ts --interpreter /home/hp/.config/nvm/versions/node/v20.1.0/bin/ts-node

# Custom name
sudo ser create index.js --name hello-world

# Pass params to index.js by adding them after a `--` followed by space
sudo ser create index.js -- --foo bar

# Pass env variables
sudo ser create index.js --env-vars "FOO=BAR GG=WP"

# Enable auto-restart on exit
sudo ser create index.js --auto-restart
  • 这将在etc/systemd/system/hello-world.ser.service中创建一个服务文件。您必须跟随startenable命令以启动服务。

  • Servicer会自动检测sudo用户可用的$PATH中nodepython的解释器。您必须手动为其他平台使用解释器标志提供解释器,例如--interpreter conda。如果解释器在sudo $PATH中找不到,请运行which conda并粘贴绝对路径。

  • 您可以使用servicer编写自己的服务文件并管理它们。只需将文件重命名为以.ser.service结尾,而不是以.service结尾。

2. 编辑.service文件

sudo ser edit hello-world

# Custom editor
sudo ser edit hello-world --editor vi

在文本编辑器中打开.service文件。如果服务不存在,则提供模板。

3. 启动服务

sudo ser start hello-world

4. 停止服务

sudo ser stop hello-world

5. 启用服务

sudo ser enable hello-world

6. 禁用服务

sudo ser disable hello-world

7. 删除服务

sudo ser delete hello-world

sudo ser rm hello-world

8. 查看服务状态

打印每个服务的PID、名称、活动状态、启用状态、CPU和内存利用率。

sudo ser status
+-------+-------------+--------+----------------+-------+--------+
| pid   | name        | active | enable on boot | cpu % | memory |
+-------+-------------+--------+----------------+-------+--------+
| 24294 | index.js    | active | false          | 0     | 9.5 KB |
+-------+-------------+--------+----------------+-------+--------+

9. 查看服务的文件路径

查找服务的.service和单元文件路径。

sudo ser which hello-world
+--------------+--------------------------------------------------------------+
| name         | path                                                         |
+--------------+--------------------------------------------------------------+
| Service file | /etc/systemd/system/hello-world.ser.service                  |
+--------------+--------------------------------------------------------------+
| Unit file    | /org/freedesktop/systemd1/unit/hello_2dworld_2eser_2eservice |
+--------------+--------------------------------------------------------------+

10. 查看日志

ser logs hello-world

# Follow live logs
ser logs hello-world --follow

11. 打印.service文件内容

ser cat hello-world

13. 重命名服务

ser rename index.js hello-world

# Or
ser mv index.js hello-world

问题

  1. nvm: node在sudo模式下不可用。您必须将node链接到sudo可用的路径。来源 - https://stackoverflow.com/a/40078875/7721443
sudo ln -s $(which node) "/usr/local/bin/node"
sudo ln -s $(which npm) "/usr/local/bin/npm"

许可证

servicer受MIT许可证的许可。

免责声明

servicer按“原样”分发,不附带任何明示或暗示的保证。servicer的作者和贡献者不对使用或无法使用该软件而造成的任何损害或损失承担责任。

在使用servicer之前,请仔细审查MIT许可证和缺乏保证。通过使用软件,您同意许可证条款并承认缺乏保证。

致谢

我们承认在servicer的开发中使用的所有软件包和库。他们的贡献对于使此项目成为可能至关重要。README和代码库的部分是用ChatGPT生成的。

贡献和支持

我们欢迎来自社区的贡献和反馈。请随时提交问题、提交拉取请求或分享您对如何进一步改进servicer的想法。

开始使用servicer并简化systemd上的服务管理。祝您创建服务愉快!

依赖关系

~15–29MB
~421K SLoC