当进程寿命达到 6 小时时执行脚本

当进程寿命达到 6 小时时执行脚本

我想知道当具有给定 PID 文件的进程的总寿命达到 6 小时时是否可以执行 perl 脚本?这可以通过 crontab 或类似程序完成吗?

我想要执行的 perl 脚本只是重新启动该进程。

我完全不知道我该如何去做这件事,但我可以想象从中TIME抓住top

答案1

下面将给出某个进程在系统中运行的经过时间(挂钟)。

ps -p PID -e etime,command

格式并不理想,因为格式会根据持续时间而变化;如果你 strace 它,你可能会发现它从 /proc/PID/status 或类似的地方获取信息

这是我偶尔使用的一种模式;如果我担心监视一个有失控倾向的进程,另一种变化是使用 rsize......

这让我想起,也许使用类似 ulimit 或 timeout 命令(或执行相同操作的包装脚本)之类的东西可以更好地解决您的问题。

如果您正在使用一个配置管理工具(例如 CFEngine),它允许您根据 rsize 等指标执行操作。

答案2

一种更简单的方法是使用类似以下命令从 ps aux 获取会议纪要

for i in $(pidof sshd); do ps aux | awk '{print $2" "$10}' | grep "^$i" | awk '{print $2}' | awk -F':' '{print $1}' ; done

然后,您可以将其嵌入脚本中并将其放置在 cron 中以重新启动相应的服务。

答案3

我想您希望自动执行脚本,因此您需要一些东西来不断检查六个小时是否已经过去,并在已经过去的情况下执行某些脚本。

我建议你使用命令手表,每隔几秒执行一次给定的命令:

 watch -n 10 my_script &

将会放手表在后台(& 的含义),它将从那里执行命令我的脚本每 10 秒(含义-n 10)。my_script 文件应该是一个 bash 脚本文件,通过以下方式可执行chmod 755 my_script,它会检查(根据其他答案中的建议)您的程序是否已达到 6 小时的限制,并采取相应的行动。

如果您担心在后台丢失此命令,如果运行该命令的 shell 因某种原因被终止,只需将该命令修改为:

  nohup 'watch -n 10 my_script'

除了重启之外,它都能存活。

相关内容