Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 确保脚本执行,如果未按计划执行,则取消执行_Mysql_Bash_Shell - Fatal编程技术网

Mysql 确保脚本执行,如果未按计划执行,则取消执行

Mysql 确保脚本执行,如果未按计划执行,则取消执行,mysql,bash,shell,Mysql,Bash,Shell,操作系统:Ubuntu 当前场景:我有一个bash脚本,计划每天12点运行,每天只运行一次。它从mysql表中获取帐户到期日为今天的用户列表,并在各种mysql表中禁用它们,同时发送电子邮件警报 问题:有时脚本会因为服务器关闭或在中午12点重新启动而错过其计划 因此,我正在寻找一些逻辑/方法,脚本应该每小时运行一次,并且应该检查以下内容 如果已经在今天下午12点成功执行,那么不要重新运行, 如果没有执行脚本,那么它应该在下一次运行时执行脚本&不要在该日期再次运行您需要保持上次成功运行的状态。我认

操作系统:Ubuntu

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

问题:有时脚本会因为服务器关闭或在中午12点重新启动而错过其计划

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

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

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

  • 在mysql中创建一个新表来存储此信息,并存储脚本成功运行时的最后一次
    datetime
    。每个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. 
上次运行时间=
当前时间=
如果;然后
不要做任何事,退出。
其他的
处理并执行正常操作。
fi
#剧本的结尾
更新表或数据库中的时间戳,以指示当天的处理已完成。

我做了一张这样的桌子。id-script_name-lastupdate 2-myscript-2018-06-25 15:48:25每当脚本运行时,其更新都在上表中。我想确保脚本每天12点只运行1次,如果它错过了计划,那么重新运行我在逻辑上丢失了,脚本应该每天12点只运行代码一次,但是如果它错过了计划,那么它应该运行代码,而且它不应该在同一日期再次运行代码。@iBBi如果答案解决了您的问题,您可以对答案进行投票。好的,我已经设法添加了一项检查,检查脚本是否已在当前日期执行,然后不要重新运行。每小时一次。这部分已经完成。但是,如果时间仅为12:00pm,我如何强制它执行实际代码(执行我的工作)?为了匹配时间,我也这样做了,但是如果错过了12pm运行,那么如何强制脚本运行代码呢?下面是脚本代码,粘贴bin链接。