我想知道当具有给定 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'
除了重启之外,它都能存活。