本项目提供了一个专业的命令行工具 launch_server,用于在 macOS 上轻松管理后台服务。它通过 macOS 原生的 launchd 服务框架,确保你的程序在用户登录后自动、静默地启动,并提供了一套完整的命令来实时控制这些服务。
其核心特性是自动化的日志管理和对复杂启动场景的支持。你可以安全地直接运行程序,也可以在需要时(如设置 ulimit)使用 shell 来执行命令。
- 支持 Shell 命令: 通过
shell_command选项,可以运行需要ulimit,&&,|等 shell 特性的复杂命令。 - 自动化日志管理: 只需配置一次日志根目录,即可自动为服务创建带时间戳的日志文件。
- 全局命令: 安装后,可在终端任何位置使用
launch_server命令。 - 自动化安装/卸载: 提供
install.sh和uninstall.sh脚本,一键完成所有配置。 - 国际化 (i18n): 自动检测系统语言,目前支持简体中文和英文。
-
克隆或下载项目: 将本项目文件放置在你希望永久保留的位置。
-
运行安装脚本: 打开终端,进入项目目录,然后运行
install.sh。cd /path/to/launch_servies_background_in_macOS bash install.sh安装脚本会自动处理所有事情,包括编译语言包、创建全局命令、并询问你是否要设置开机自启动。
这是你定义所有后台服务的地方。config.json 包含 settings 和 services 两个部分。
-
settings: 用于全局设置。log_directory: 必须指定。所有服务日志的根目录。
-
services: 一个服务对象的数组。
每个服务对象必须且只能包含 command 或 shell_command 之一。
command(推荐): 用于直接、安全地执行一个程序。shell_command: 用于需要 shell 特性的场景。注意: 使用此选项时,请确保命令是安全的,因为它会由 shell 直接解释。
| 字段名 | 类型 | 描述 |
|---|---|---|
name |
string | 服务的唯一可读名称。 |
command |
string | 要执行的程序或脚本的绝对路径。 |
args |
array | 传递给 command 的参数列表 (与 shell_command 不兼容)。 |
shell_command |
string | 要在 shell 中执行的完整命令字符串。 |
env |
object | 为该服务设置的特定环境变量。 |
enabled |
boolean | true 表示该服务将在 start 命令时启动。 |
使用 command (标准方式):
{
"name": "Simple Python Web Server",
"command": "/usr/bin/python3",
"args": ["-m", "http.server", "8080"],
"env": {},
"enabled": true
}使用 shell_command (高级场景):
{
"name": "Qdrant Server",
"shell_command": "ulimit -n 99999 && /path/to/your/qdrant --config-path /path/to/config.yaml",
"env": {},
"enabled": true
}日志会自动生成在 log_directory 中,并按服务名和时间戳进行归档。
安装成功后,你就可以在终端的任何位置使用 launch_server 命令了。
可用命令:
-
launch_server check: 检查config.json文件是否存在语法和结构错误。在修改配置文件后,推荐使用此命令进行验证。 -
launch_server start: 启动所有已启用的服务。注意: 此命令会自动先进行全面的配置检查,如果发现任何问题(包括使用了未修改的模板),都会给出清晰的提示。 -
launch_server status: 显示所有服务的状态。注意: 此命令会自动先进行全面的配置检查。 -
launch_server stop <服务名>: 临时停止一个服务。 -
launch_server restart <服务名>: 重启一个服务。 -
launch_server disable <服务名>: 永久禁用一个服务(修改配置文件)。 -
launch_server enable <服务名>: 重新启用一个服务(修改配置文件)。
运行 uninstall.sh 脚本即可干净地移除所有组件。