shell脚本的最后运行时间



我需要在我的一个脚本中创建某种类型的故障安全,以防止它在失败后立即重新执行。通常,当脚本失败时,我们的支持团队使用第三方工具重新运行脚本。这通常是可以的,但不应该发生在这个特定的脚本。

我将在日志中回显一个时间戳,然后创建一个条件来查看当前时间戳是否比日志中的时间戳至少大2小时。如果是,脚本将自动退出。我相信这个主意会奏效的。然而,这让我很好奇,看看是否有一种方法可以从系统本身拉入脚本的最后运行时间?或者是否存在防止脚本立即重新运行的替代方法。

这是一个SunOS Unix系统,使用Ksh Shell。

就像您建议的那样,保存date >some file并在脚本开始时检查它。您可以:

  • 检查最后一行(作为日期字符串本身)
  • 或文件的最后修改时间(例如,当最后日期命令修改somefile
  • 时)。

另一种常用的方法是创建一个指定的lock-file,或pid-file,如/var/run/script.pid,其内容通常是创建它的进程的PID(和主机名,如果需要的话)。当然,文件修改时间会告诉您它是什么时候创建的,通过它的内容您可以检查正在运行的PID。如果PID不存在,(例如预处理进程已死亡)文件修改时间为X分钟,您可以重新启动脚本。

这个方法很好,主要是因为您可以简单地使用cron + some script_starter.sh,它将定期检查脚本运行状态并在需要时重新启动它。

如果您想使用系统资源(并且拥有root访问权限),您可以使用accton + lastcomm

我不知道SunOS,但可能知道那些程序。accton启动系统范围内所有程序的记帐,(需要是root), lastcomm command_name | tail -n 1显示command_name上次执行的时间。

检查man lastcomm是否有命令行开关

相关内容

  • 没有找到相关文章

最新更新