Mac系统下bash如何并行运行进程 解决sls启动后脚本延迟执行问题
Mac bash 多命令执行流程问题解决方案
核心问题原因
当前脚本中sls offline start默认以前台进程运行,会阻塞后续所有命令执行,只有该进程被手动终止后才会触发后续的新终端启动逻辑,和预期执行顺序不符。
修复后完整脚本
#!/bin/bash testDirectory='/Users/jxxxx/Desktop/xxxxx/mad_team_training/Trimify/backend-operations/tests/pagination-integration.test.js' deleteScript='/Users/jxxxx/Desktop/xxxxx/mad_team_training/Trimify/backend-operations/scripts/test-delete-table.sh' echo "$testDirectory" cd ../ # 后台启动sls offline,日志仍输出到当前终端,满足保留需求 sls offline start & # 记录sls进程PID,用于后续终止 SLS_PID=$! # 等待sls服务启动完成,可根据实际启动速度调整等待时间,也可替换为下方端口检测逻辑 sleep 15 # 新终端运行删除脚本 open -a Terminal.app $deleteScript # 等待删除脚本执行完成 wait $! # 终止sls进程 kill $SLS_PID
可选优化:替换固定等待为端口检测
如果你的sls offline启动后会监听固定端口(比如默认的3000),可以把上面的sleep 15替换为如下逻辑,实现启动完成后立即执行后续步骤,无需固定等待:
# 检测3000端口是否被监听,直到启动成功再继续 until nc -z localhost 3000; do echo "等待sls offline服务启动..." sleep 2 done
注意事项
如果删除脚本执行完成后终端不会自动退出,需要在test-delete-table.sh的末尾添加exit命令,确保脚本执行完后进程退出,wait命令才能正确捕获执行完成信号,自动终止sls进程。
内容的提问来源于stack exchange,提问作者Jatin Mehrotra
相关产品推荐
相关产品推荐

