shell脚本的上次运行时间?

时间:2015-05-18 19:39:57

标签: shell unix timestamp ksh sunos

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

我要在日志中回显一个时间戳,然后创建条件以查看当前时间戳是否比日志中的时间戳大至少2小时。如果是这样,脚本将自行退出。我相信这个想法会起作用。但是,这让我很好奇,看看是否有办法从系统本身拉入脚本的最后运行时间?或者,如果有另一种方法可以防止脚本立即重新运行。

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

1 个答案:

答案 0 :(得分:1)

按照您的建议,执行此操作,保存date >some file并在脚本开始时检查它。你可以:

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

其他常用方法是创建一个指定的lock-filepid-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命令行开关。