shell 脚本的最后 运行 时间?

Last run time of shell script?

我需要在我的一个脚本中创建某种故障保护,以防止它在失败后立即重新执行。通常当脚本失败时,我们的支持团队会使用第 3 方工具重新运行脚本。这通常没问题,但对于这个特定的脚本不应该发生这种情况。

我打算将时间戳回显到日志中,然后设置条件以查看当前时间戳是否至少比日志中的时间长 2 小时。如果是这样,脚本将自行退出。我相信这个想法会奏效。但是,这让我很好奇是否有办法从系统本身提取脚本的最后 运行 时间?或者如果有其他方法可以防止脚本立即重新运行.

SunOS Unix系统,使用KshShell。

照你的建议去做,保存 date >some file 并在脚本启动时检查它。您可以:

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

其他常见的方法是创建一个指定的lock-file,或者pid-file这样的/var/run/script.pid,它的内容通常是创建它的进程的PID(和主机名,如果需要的话) .当然,file-modification time 告诉你它是什么时候创建的,通过它的内容你可以查看运行 PID。如果 PID 不存在,(例如,预处理终止)并且文件修改时间早于 X 分钟,您可以重新启动脚本。

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

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

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

检查命令行开关的 man lastcomm