检测 LSF 守护进程是否正在运行

检测 LSF 守护进程是否正在运行

ps我继承了一个脚本,它尝试通过执行然后 grep 一堆东西来检测 LSF 守护进程是否正在运行。我认为这很容易出错,我正在寻找更好的方法。到目前为止,我发现的最好的方法是 LSF 命令lsid,但它只能指示 LSF 是否已安装,并不能真正告诉我一切是否正常运转。除了提交作业,有人有更好的主意吗?这需要与 Linux 和 Solaris 配合使用。

答案1

一般来说:

在 Linux/Unix 上,了解某个进程是否正在运行的唯一安全方法是使用 pidfile 方法。

这意味着:

  1. 启动进程时,您会将新启动进程的 PID 保存在 pidfile 中。通常,此文件保存在进程的日志文件所在的位置,并且您的情况中一个好的名称是lsf.pid(这似乎是此类文件的惯例)。

  2. 现在您需要一个脚本来启动/停止/显示进程状态,该脚本会考虑 pidfile。互联网上有很多这样的脚本。

这种方法的主要好处是您可以执行ps -p <pidno>。这是确定进程是否正在运行的唯一安全方法。此外,该ps -p命令可跨 Linux/Unix 版本移植,这与您能找到的许多其他命令不同。

总而言之:是的,您可以使用 grep 来查找各种形式的ps命令输出,但这绝不是一种安全的方法,而且很难真正实现可移植性。咬紧牙关,使用 pidfile 方法。

关于Solaris:

你的守护进程应该运行在单模光纤

这解决了您的所有问题(您不需要上面描述的通用方法),同时还为您提供:

  1. 开机时自动启动。
  2. 依赖管理:只有当满足您定义的依赖关系(例如“网络启动”等)时才会启动该过程。
  3. 如果进程失败则自动重启。
  4. 如果依赖项重新启动,则自动重新启动(如果您愿意)。
  5. SMF 跟踪唯一地标识您的流程的整个问题。
  6. 您可以定义允许服务同时运行的次数。通常为 1。这可避免进程重复启动。
  7. 管理委派。您可以以安全的方式将启动/停止服务的权限委托给其他人,而无需该用户获得该服务所需的权限(这有点像sudo强化版)。

相关内容