将有效负载分配给多个cron作业

时间:2017-02-03 06:40:50

标签: linux shell cron

我有一个shell脚本说data.sh。要执行此脚本,我将传递一个参数,如Table_1。

我有一个测试文件,我将通过不同的脚本获得该文件。

现在在测试文件中,我有超过1000个参数传递给脚本。

该文件如下所示:

Table_1
Table_2
Table_3
Table_4
and..so..on

现在我想执行脚本并行运行。

我是用cron job做的。

首先,我将测试文件分成20个部分在Linux中使用split命令。

 split -l $(($(wc -l < test )/20 + 1)) test

然后我将测试文件分为20个部分,如xaa,xab,xac等。

然后运行cron作业:

* * * * * while IFS=',' read a;do /home/XXXX/data.sh $a;done < /home/xxxx/xaa
* * * * * while IFS=',' read a;do /home/XXXX/data.sh $a;done < /home/xxxx/xab
and so on.

因为这涉及很多手动过程。我想动态地这样做。

这是我想要实现的目标:

1)一旦我收到测试文件,我希望它能自动分成20个文件并存储在特定的地方。

2)然后我想通过将20个文件作为参数传递给脚本来安排每天5 am的cron作业。

实现此目的的最佳方法是什么?任何有解释的答案都将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是你能做的。创建两个file_splitter.sh个职位:

  1. file_processer.sh - &gt;拆分文件并将其存储在特定目录中
  2. data.sh - &gt;从上面的目录中一次拾取一个文件,执行读取循环,并调用file_splitter.sh。成功处理后删除文件。
  3. file_processor.sh安排在file_splitter.sh之前运行。

    如果要实现进一步的并行性,可以使file_processor.sh将拆分文件写入多个目录,每个目录中都包含几个文件。假设它们被称为sub1,sub2等。然后,您可以调度多个cron实例并将子目录名称作为参数传递。由于拆分文件存储在不同的目录中,因此我们可以确保只有一个作业处理特定子目录中的文件。

    最好让* * * * * /path/to/file_processor.sh 命令尽可能简单。

    * * * * * while IFS=',' read a;do /home/XXXX/data.sh $a;done < /home/xxxx/xab
    

    优于

    JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value));
    

    有道理吗?

    我写了一篇关于如何有效管理cron工作的帖子。你可能想看看它:

    Managing log files created by cron jobs