如何向justfile的recipe发送ctrl+c信号,而非终止just进程?
解决Justfile中Ctrl+C后自动停止Docker服务的问题
你的Justfile写法存在两个核心问题:
- 依赖语法错误:冒号后的
(up-latest "backend" "-d") && (compose-stop "backend")不符合Just的依赖规则,Just会把这段内容当作单个依赖名而非执行命令序列。 - 未处理中断信号:默认情况下,Just收到Ctrl+C会直接终止所有进程,不会触发后续清理操作。
修正后的Justfile
webdev: # 先启动后端服务 up-latest "backend" "-d" # 设置中断信号捕获,收到Ctrl+C时执行停止后端的操作 trap 'compose-stop "backend"' INT # 启动前端开发服务 cd website && npm run dev up-latest target='' daemon='': docker compose up {{target}} {{daemon}} compose-stop target='': docker compose stop {{target}}
原理说明
- 使用shell的
trap命令捕获INT信号(即Ctrl+C触发的中断信号),指定信号触发时执行compose-stop "backend"来清理后端服务。 - 调整后,当你按下Ctrl+C时,信号会先被
trap捕获并执行清理命令,同时原有npm run dev进程也会被终止,不会导致Just直接退出而跳过清理步骤。
简化写法(无需复用recipe)
如果不需要复用up-latest和compose-stop,可以直接写成单命令序列:
webdev: docker compose up backend -d trap 'docker compose stop backend' INT cd website && npm run dev
内容的提问来源于stack exchange,提问作者Cornelius Roemer
相关产品推荐
相关产品推荐

