我需要在我的一个脚本中创建某种故障安全,以防止它在失败后立即重新执行。通常,当脚本失败时,我们的支持团队会使用第三方工具重新运行脚本。通常没问题,但这个特定的脚本不应该发生。
我要在日志中回显一个时间戳,然后创建条件以查看当前时间戳是否比日志中的时间戳大至少2小时。如果是这样,脚本将自行退出。我相信这个想法会起作用。但是,这让我很好奇,看看是否有办法从系统本身拉入脚本的最后运行时间?或者,如果有另一种方法可以防止脚本立即重新运行。
这是一个使用Ksh Shell的SunOS Unix系统。
答案 0 :(得分:1)
按照您的建议,执行此操作,保存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
命令行开关。