Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于每小时运行以提取数据的Shell脚本(如果存在)_Shell_Unix_Job Scheduling_Autosys - Fatal编程技术网

用于每小时运行以提取数据的Shell脚本(如果存在)

用于每小时运行以提取数据的Shell脚本(如果存在),shell,unix,job-scheduling,autosys,Shell,Unix,Job Scheduling,Autosys,我试图优化我们的批处理过程,以便将数据拉入并插入数据库。目前,我们有一个数据源,可以从中提取数据,创建文本文件,并加载到报告数据库中。我们在Autosys中有一个时间表,因为大多数时间,数据在某个特定时间可用。但是,最近,数据源已经延迟,我们无法在计划的时间内提取数据,我们必须手动运行shell脚本 我希望有一个每小时运行一次查询的shell脚本,如果数据存在,则将假脱机到一个要加载到数据库中的文件。如果数据不存在,请在下一小时再试一次,这样我们就可以消除任何手动干预 我知道,如果文件存在,我可

我试图优化我们的批处理过程,以便将数据拉入并插入数据库。目前,我们有一个数据源,可以从中提取数据,创建文本文件,并加载到报告数据库中。我们在Autosys中有一个时间表,因为大多数时间,数据在某个特定时间可用。但是,最近,数据源已经延迟,我们无法在计划的时间内提取数据,我们必须手动运行shell脚本

我希望有一个每小时运行一次查询的shell脚本,如果数据存在,则将假脱机到一个要加载到数据库中的文件。如果数据不存在,请在下一小时再试一次,这样我们就可以消除任何手动干预


我知道,如果文件存在,我可以在Autosys中设置一个文件触发器,以将加载运行到数据库中,但是我在设置shell脚本时遇到了问题,该脚本仅在数据可用时才拉取数据,如果文件已被假脱机,则不会在下一个小时重复。我是UNIX新手,因此不知道如何继续。任何帮助都会很好。

您还没有明确说明优先顺序。优先事项可以是:

  • 一旦数据可用,立即加载数据
  • 至少每x分钟或小时加载一次数据
  • 消除任何手动干预的需要(从您的问题中可以清楚看出)
假设数据一可用就不需要加载,您可以这样做:

  • 增加Autosys作业的频率(不是每小时一次,可能是每30或15分钟一次)
  • 更改脚本,以便:
    • 它仅在上次成功加载后x分钟内尝试加载,否则不执行任何操作并以成功结束
    • 将最后一次成功加载的时间戳存储在文件中(仅在成功加载时才会触及)
    • 如果数据在x+一些缓冲区分钟后仍然没有到达,那么加载作业失败可能更有意义,以便获得所需的注意

嗨,很抱歉,我只发过一个问题。我需要假脱机文件,如果数据每天只有一次,如果作业在上午10点运行,没有数据,然后在上午11点再次运行。如果有数据、假脱机文件,则不要在中午12点再次运行查询。我以前从未使用过Autosys,有没有一种方法,如果一个文件被成功假脱机,那么作业将标记为成功?因此,如果您的目标是每天只加载一次数据,那么您仍然可以每小时运行一次作业,并使用上一次数据加载时间戳来控制加载频率。我相信Autosys会根据作业的退出代码获取作业的运行状态-0为成功。另一点是,如果有任何其他作业依赖于您的加载作业,您可以将其视为失败,因为自上次加载以来已超过24小时,并且没有可供加载的数据。我刚刚更新了答案以反映这一点。谢谢!这很有帮助!这里的重要组成部分是数据源:如何从该源提取数据?它是一个数据库,是一个自动创建的文件吗?你能在不破坏它的情况下测试它的存在吗?一旦知道了这一点,您就可以用一个循环来替换批处理作业,该循环等待并检查数据,处理数据,然后停止。这是一个从源数据库(teradata)提取、假脱机文件,然后加载到报告数据库(oracle)的查询。我从未使用过teradata,顺便回答了一些关于脚本编写的问题。您需要为teradata db创建一个查询,该查询将告诉您所需的数据是否存在。是否有一些键值可以用作某种类型的哨兵?我目前正在使用的另一个想法是,使用工作流中的一个条件,通过Rest API重新提交作业。这将允许您根据以前提交的时间选择何时重新提交。例如,第一次重新提交的下一个小时,第二次提交的30分钟,然后15分钟,等等。没有关键值,它实际上只是一个数据拉取。