just 命令执行器:让 Makefile 下岗,把运维命令固化成一条条短命令

很多朋友的自建服务目录里,都躺着一个 Mak…

很多朋友的自建服务目录里,都躺着一个 Makefile。初衷很简单:把 docker compose pull && docker compose up -d 这类命令,缩写成一句 make deploy。可真用起来就难受了——Makefile 的 recipe 必须用 Tab 缩进,编辑器一不留神换成空格,直接报 missing separator;想传个参数还得用 make deploy db=prod 这种别扭写法;写个 clean 假目标还得惦记着加 .PHONY。Make 本是为编译 C 程序设计的构建工具,硬拿来当命令运行器,确实委屈它了。

今天推荐一个更顺手的替代品:just

just 是专门为“运行命令”设计的

它不搞构建依赖那一套,语法简单到看一眼就会。安装也快:

# Debian/Ubuntu 直接装
sudo apt install just

# 或者用官方脚本装最新版
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin

一个 justfile 搞定部署、备份、看日志

装完在项目目录里建一个 justfile,把常用操作写进去。比如一个跑了 WordPress + MySQL 的自建站:

# 一键部署
deploy:
    docker compose pull
    docker compose up -d

# 备份数据库,db 是可选参数,默认 prod
backup db="prod":
    docker compose exec -T db mysqldump -u root -p'{{db}}' > backup-{{db}}-$(date +%F).sql.gz

# 看服务日志,svc 传服务名
logs svc:
    docker compose logs -f --tail=100 {{svc}}

缩进随便用空格就行,再也不用跟 Tab 较劲。然后:

just deploy          # 部署
just backup          # 备份,用默认 db=prod
just backup db=dev   # 传参数覆盖
just logs nginx      # 看 nginx 日志

几个实用的特性

  • just --list(或直接 just)会列出所有命令和注释,团队新人一眼看懂该怎么操作,比翻 README 强多了。
  • 变量用 {{变量名}},还能设默认值、传参覆盖。
  • 命令之间可以声明依赖:deploy: pull build,会先跑依赖再跑主体。
  • 跨平台,Windows/macOS/Linux 通吃,比 Makefile 的兼容性好太多。

我的习惯是,每个自建服务目录里都放一个 justfile,把“部署、备份、恢复、看日志、进容器”这五件套固化下来。时间一长,运维操作从“回忆命令”变成了“just 一下”,省心又不容易手滑敲错。

如果你也被 Makefile 的 Tab 缩进折磨过,或者想让自己的服务目录“自文档化”,just 值得花十分钟试试。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注