bjo*_*asm 2 python linux bash shell ubuntu
我有大量的文件,每个文件将被解码,排序/最小化,然后放入数据库.每个操作都有自己的bash脚本.这些文件被分类到每日文件中,这些文件位于连续的每月文件夹中.问题是只有一个数据库,只有一个表(SQLite),所以数据库脚本当时只能在一个文件上运行,而解码和排序可以同时在大约四个文件上完成.
对于要排序的文件,必须通过解码过程,要将文件放入数据库,必须对其进行解码和排序.这些脚本的运行时间不一样,我相信解码是空腹,然后是输入然后是排序.
每个bash脚本decode.sh sort.sh saveintodb.sh循环遍历文件夹中的所有文件并完成其工作.
最初我想有一个masterscript执行decode.sh- > sort.sh- > saveintodb.sh
每个文件夹(月).
但是,由于预计需要几天时间,我想到了这样的事情:
1: decode.sh January
2: sort.sh January, decode.sh February
3: saveintodb.sh January sort.sh February decode.sh March
4: saveintodb.sh February sort.sh March decode.sh April
Run Code Online (Sandbox Code Playgroud)
等等.直到12月.
但是,我不知道如何设置它,以一种好的方式.我知道我可以2:在并行运行脚本,但是我不太确定如何运行脚本3:当2:完成时自动运行.
我也不确定这是否是最好的方法.理想情况下,有一个解码脚本,一个排序脚本和一个始终运行的saveintodb脚本.甚至可能是几个解码和排序脚本(不知道如果这会加快这个过程,我很遗憾地在外部HD工作).
数据量: 1.3 TB
数据类型:文本文件
背景:位置报告(纬度/经度,时间)
对不起这篇长文,有什么建议吗?
在Linux上,使用crontab(5)来安排各种shell脚本.它们可以并行运行.
您也可以查看GNU并行,但我想您不需要它.
最后,shell脚本可以使用at或者调度另一个脚本batch.例如,decode.sh 也许可能以batch -f sort.sh或结尾at -f sort.sh now + 10 minutes
你可能会使用一些更强大的脚本语言,例如Python,Guile,Perl,....
顺便说一句,一定要测试每个脚本(甚至是其中的部分)的成功.使用logger(1)发出日志消息(可能在每个步骤或命令之后持续超过半小时,以及每个脚本的开始和结束).每天检查日志!
最后,我不明白为什么一次只能运行一个数据库脚本.大多数真正的DBMS(PostGreSQL,MonGoDB,MariaDB等) - 但不是sqlite - 可以运行(或配置为运行)多个数据库客户端同时访问同一个数据库(当然还有不同的数据库).阅读有关ACID属性的更多信息.
在某些外部USB硬盘上执行此操作是恕我直言,因为这样的硬件可靠性有限(并且通常很慢).你应该考虑使用一些服务器(也许一个好的桌面可能有这样的角色).您可能需要UPS以避免电源故障.
如果这个复杂的处理和处理过的数据对你有一些价值,你应该升级硬件(获得服务器机器,可能带有UPS和ECC RAM,如果数据适合,还有SSD)和软件(使用真正的DBMS) ,关心失败).估算失败和/或数据丢失的成本(记住要考虑到你的时间).也许租用一些云计算或存储可能很有趣(或者只是一个带备份的VPS托管Linux系统,你可以每个月获得一个大约两十几美元或欧元:kimsufi,ovh,rackspace,aws,...).. .