mysql - 确保脚本执行或在计划错过时踢掉它

标签 mysql bash shell

操作系统:Ubuntu

当前场景:我有一个 bash 脚本,计划每天中午 12 点运行,每天仅运行一次。它从 mysql 表中获取帐户到期日为今天日期的用户列表,并在各种 mysql 表中禁用它们,并发送电子邮件警报。

问题:有时,由于服务器关闭或中午 12 点重新启动,脚本会错过其计划。

因此,我正在寻找一些逻辑/方法,脚本应该每小时运行一次,并且应该检查以下内容

如果今天中午 12 点已成功执行,则不要重新运行, 如果它没有被执行,那么它应该在下次运行时执行脚本并且不要在该日期再次重新运行

最佳答案

您需要保留上次成功运行的状态。我认为你可以通过两种方式实现:

  • 在 mysql 中创建一个新表来存储此信息并存储脚本成功运行时的最后一个日期时间。每 1 小时脚本就会醒来并查看此时间戳以执行任何待处理的操作。

  • 您还可以将此信息存储在某些系统文件夹中,例如“/var/log/”或您的应用程序有权访问的文件夹中,并且您需要确保此文件不会在重新启动后被删除。

将此逻辑放在文件的开头:

last_time_run = <fetch_from_db or persistant file>
current_time = <get_current_time>

if <already executed>; then
   don't do anything and exit. 
else
   processed and do normal actions.
fi


# End of the script
Update the timestamp in table or db to indicate that for current day the processing is finished. 

关于mysql - 确保脚本执行或在计划错过时踢掉它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51022970/

相关文章:

linux - 如何将 bash/awk 命令放入变量(不是命令的输出)

bash - 为什么 cut 命令对 "docker image ls"命令不起作用?

linux - 将变量导出到另一个 bash 脚本

c - 需要在 shell 脚本中获取 C 程序名称

mysql - InnoDB file_per_table存储释放

mysql - 从 MySQL 模式生成迁移

php - 当有新的sql条目时如何将div添加到正确的位置?

java - 无法从 java 运行 shell 脚本

mysql - cakephp find ('all' ) 得到最后匹配的记录

linux - 使用数字排序合并 pdf 文件