操作系统: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/