我有一个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作业。
实现此目的的最佳方法是什么?任何有解释的答案都将不胜感激。
答案 0 :(得分:2)
这是你能做的。创建两个file_splitter.sh
个职位:
file_processer.sh
- &gt;拆分文件并将其存储在特定目录中data.sh
- &gt;从上面的目录中一次拾取一个文件,执行读取循环,并调用file_splitter.sh
。成功处理后删除文件。将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工作的帖子。你可能想看看它: