【问题标题】:How to call a shell script multiple times in parallel from another application如何从另一个应用程序并行多次调用 shell 脚本
【发布时间】:2019-05-20 13:17:16
【问题描述】:

我正在使用 Datastage,它使用 Command Executable Stage 来调用参数化的 Shell 脚本。这个问题与数据阶段无关。这是关于如何调用shell脚本的。

目前,datastage的逻辑是调用脚本3次,每次调用时使用不同的参数。例如:

Call script.sh file1.txt -> Wait for `exit 0` -> call script.sh file2.txt -> Wait for `exit 0` -> call script.sh file3.txt -> wait for `exit 0`

调用脚本的命令如下:

/var/opt/scripts/Project/script.sh file1.txt

我希望同时调用所有三个 shell 脚本。如何以允许我同时执行两次以上的方式调用脚本?

谢谢。

更新 1

我想感谢关于这个问题的来信。需要澄清的一件事是,我不能从同一个调用中调用所有三个 script.sh 命令。这是从应用程序中三个独立且相同的位置调用的。

谢谢

【问题讨论】:

  • 您可能正在寻找等待命令 man7.org/linux/man-pages/man1/wait.1p.html 这将允许您从各种命令中收集进程 ID,然后等待它们全部完成。
  • 您的问题绝对是关于数据阶段,以及如何从中调用进程。除非您想编写简单的包装脚本,您可以在其中编写 E=/var/opt/scripts/Project/script.sh; $E & $E & $E & wait;
  • 你试过/var/opt/scripts/Project/script.sh file1.txt & 吗?当您启动后台进程& 3 次时,它将启动3 次。您应该了解如何处理关闭应用程序后仍在运行的临时文件、标准输出和脚本。
  • 1.您是否必须考虑脚本运行失败并以非 0 值退出的可能性? 2. 最后一个脚本调用是否有一个文件名参数,可以从中确定它是最后一次运行(如file3.txt 中的3)? 3.可以修改script.sh吗?

标签: bash shell ksh datastage


【解决方案1】:

GNU 并行 (https://www.gnu.org/software/parallel/) 是一个用于并行执行作业的 shell 工具。

对于您的示例,类似的东西应该可以工作:

seq -w 1 3 | parallel ./script.sh file{}.txt

请查看parallel 的手册页及其 gnu.org 主页上的信息。

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多