我知道递归工作流调用的典型解决方案是创建 2 个工作流并相互调用,直到满足条件并结束工作流。
但我尝试在没有第二个工作流程的情况下执行此操作,而是在工作流程的最后使用了一个命令,并用它创建了一个 shell 脚本,然后使用 nohup 和 & 运行该脚本。
它显然有效,但 pmcmd 命令返回一条奇怪的消息,据说我几秒钟前运行的工作流程受到了影响,但显然没有,因为它刚刚运行。
假设我的工作流程名称是:wkf_myworkflow_looped
我像这样创建 shell,每个都是命令任务中的一行:
echo '#!/bin/sh'>/batch/myproject/run_next.sh
echo 'sleep 60' >>/batch/myproject/run_next.sh
echo 'pmcmd startworkflow -service $$SERVICE -domain $$DOMAIN -u $$USER -p $$PASSWORD -f $$FOLDER -nowait wkf_myworkflow_looped'>>/batch/myproject/run_next.sh
chmod 777 /batch/myproject/run_next.sh
nohup /batch/myproject/run_next.sh>>/batch/myproject/run_next_out.txt t 2>&1 &
然后,工作流程完成,我等待 60 秒。我设置这个延迟是为了让工作流程完全稳定并处于成功状态。
但是,当我打开输出文件 run_next_out.txt 时,它显示:
Informatica(r) PMCMD, version [10.5.1], build [614.0914], LINUX 64-bit
Copyright (c) 1993-2021 Informatica LLC. All Rights Reserved.
See patents at https://www.informatica.com/legal/patents.html.
Invoked at Sat Aug 03 19:07:57 2024
Connected to Integration Service: [INT_SERVICE].
Starting workflow [wkf_myworkflow_looped]
ERROR: Workflow Workflow [MYFOLDER:wkf_myworkflow_looped[version 14]] is impacted.
The Integration Service is not configured to run sessions impacted by dependency updates. Please check the Integration Service log for more information.
Disconnecting from Integration Service
Completed at Sat Aug 03 19:07:57 2024
但是我的工作流程没有受到影响,我检查了它,然后就运行了它。它刚刚运行了一分钟。
为什么会出现这种情况?
看起来 pmcmd 不喜欢从运行主 PC 进程的进程中调用。
有人尝试过成功吗?
建议的解决方案
拥有递归工作流程的一种典型解决方案是创建一个,连续运行的工作流程:
连续运行。集成服务会立即运行工作流 服务初始化。然后集成服务启动下一个 工作流程完成前一次运行后立即运行。
工作流程内部可以有一个条件来确定要采取或等待的操作等。
相当常见的解决方案是有一个逻辑来检查指标文件是否存在。等待任务检查指标文件是否存在并继续运行工作流程。如果工作流程停止,则会执行一项任务来删除指示器文件 - 工作流程将继续等待,直到某个外部进程再次创建该文件,然后它将再次启动。
可能的根本原因
“受依赖项更新影响的会话”表明存在未正确提取到会话的更改。刷新所有会话和映射,确保所有内容均已保存并签入(如果是版本化存储库)。
下一步:请记住,很可能不是您第二次执行工作流程。集成服务定义了操作系统配置文件,并且用户运行脚本。如果未签入所有内容,则可能看不到所有更改。因此,当您调用工作流时,脚本会在不同用户的上下文中执行。事情可能会向这边发展。确保适当的权利也到位。
上面提到的想法来自这篇文章我发现对这个问题的思考。
虽然这应该可以帮助您解决这个问题,但解决这个问题的典型方法仍然是连续运行工作流程,如上所述:)