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 值得花十分钟试试。
