如何跟踪 bash 中最后一次成功的 运行

How to keep track of last successful run in bash

我正在 运行 编写一个 ETL 脚本,将数据从 mysql 加载到 teradata 中。该脚本旨在 select 晚于 bash 脚本最后一次成功 运行 的时间戳的所有行。由于我没有 mysql 数据库的写入权限,因此我需要使用 bash 脚本存储最后的 运行 时间戳。有没有一种简单的方法来存储成功 运行 的时间戳?我在想我可以有一个文件,我会在脚本末尾触摸它,然后检查它的 mtime,或者只是从日志文件中解析出时间戳。有哪些更好的策略可以做到这一点?

在您的脚本中,使用 set -e1 以便在脚本中的任何命令失败时立即退出脚本。然后,最后,使用 unix 时间戳 date +%s.

记录成功完成

然后您可以使用 SELECT FROM_UNIXTIME(<YOUR TIMESTAMP>, <YOUR MYSQL DATE FORMAT>)2 提取比上次成功完成更新的行。

一个重要警告:我不会仅仅依靠时间戳来解决这个问题。我会从 MySQL 中拉出一些时间重叠,并检查每次插入 teradata 的主键以避免插入重复项。要遵循此方法,只需从 <YOUR TIMESTAMP> 中减去 1800 即可确保重叠 30 分钟。