You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现多个ksh脚本在前序执行完成后自动按顺序运行

顺序自动执行ksh脚本的实现方法

你可以根据自己的需求选以下任意一种方式,都能实现前一个脚本跑完自动启动下一个,不需要人工值守:

方式1:命令行直接拼接执行(最快捷,无需写额外脚本)

  • 如果你需要前序脚本执行成功才跑后续脚本(前一个报错就终止),直接在终端输入单行命令即可,&& 会自动判断前一个命令的退出状态,只有返回0(执行成功)才会执行下一条:
ksh first.ksh && ksh second.ksh && ksh third.ksh
  • 如果你需要无论前序脚本是否执行成功都按顺序跑完所有脚本,用;分隔命令即可:
ksh first.ksh; ksh second.ksh; ksh third.ksh

方式2:编写独立调度脚本(适合重复执行、需要日志/错误校验的场景)

新建一个总调度脚本,比如命名为run_all.ksh,写入以下内容:

#!/usr/bin/env ksh
# 自动切换到脚本所在目录,避免相对路径找不到目标脚本的问题
WORK_PATH=$(cd "$(dirname "$0")" && pwd)
cd "$WORK_PATH" || exit 1

echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') 开始执行 first.ksh"
ksh first.ksh
if [ $? -ne 0 ]; then
    echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') first.ksh 执行失败,终止流程"
    exit 1
fi

echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') first.ksh 执行完成,开始执行 second.ksh"
ksh second.ksh
if [ $? -ne 0 ]; then
    echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') second.ksh 执行失败,终止流程"
    exit 1
fi

echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') second.ksh 执行完成,开始执行 third.ksh"
ksh third.ksh
if [ $? -ne 0 ]; then
    echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') third.ksh 执行失败"
    exit 1
fi

echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') 所有脚本执行完成"

给调度脚本加可执行权限:

chmod +x run_all.ksh

后续直接运行./run_all.ksh即可。如果需要留存运行日志,可以把输出重定向到日志文件:

./run_all.ksh > execute_$(date +%Y%m%d%H%M).log 2>&1

如果需要后台运行、关闭终端也不中断任务,可以搭配nohup使用:

nohup ./run_all.ksh > execute_$(date +%Y%m%d%H%M).log 2>&1 &

补充说明

  • 如果你的三个ksh脚本本身已经加了可执行权限,且脚本开头写对了ksh的shebang行,也可以把命令里的ksh first.ksh替换为./first.ksh,效果完全一致。
  • 调度脚本里的错误判断逻辑可以根据自己的需求调整,如果不需要失败中断,删掉对应的if判断块即可。

内容的提问来源于stack exchange,提问作者hch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:36:17