0

我需要在多个盒子/机器中找到核心文件并触发有关核心文件生成的电子邮件。

我们是否有任何实用程序可以帮助我们在单机或多机中找到核心。我相信我们应该有任何实用程序来找到核心文件,因为它是非常通用的场景。

在以下输入之后,我可以编写一个 perl 脚本来查找核心文件并在存在任何核心文件时触发邮件

该脚本可以在本地机器上正常工作,但我需要添加所有生产服务器。有没有人给我提供通过 Perl 脚本连接 linux 终端的任何想法。

截至目前,我们专注于开发机器所以这个脚本可以登录到所有开发机器并找到核心文件。

4

3 回答 3

0

将其实施到您的电子邮件脚本中:

find / -name core

或者只是 cronjob 将所有路径输出到日志。当然你也可以把find命令中的“/”换成特定的路径

于 2012-07-05T07:57:18.603 回答
0

老式的方法是定期在整个文件系统中搜索核心文件:

find / -type f -name core

或者

find / -type f -name 'core.*'

当然,这确实存在将用户文件与(相当不幸的)名称匹配的风险core

幸运的是,现代 Linux 系统在某种程度上更具可配置性。您可以使用该/proc/sys/kernel/core_pattern文件设置将放置核心文件的特定目录,以及文件名称的格式。您可以拥有包含程序名称、启动程序的 UID 和 GID 等的核心文件名 - 请查看此手册页

这样,您可以将所有核心文件保存在一个目录中,这有几个优点:

  • 您不会冒险让核心文件散布在整个文件系统中。

  • 您可以轻松删除所有核心文件,而无需在整个文件系统中进行搜索的计算费用,也没有删除用户文件的风险。

  • 由于所有核心文件都在一个地方,因此根据需要轮询新文件要合理得多。

  • 如果您想立即采取行动,您可以通过使用inotifywait或其他基于inotify核心文件目录的工具来避免轮询。

于 2012-07-05T09:51:34.943 回答
0

Shell 脚本将更好地解决您的问题。我不习惯使用 shell 脚本,但我试图制定它。

#list of server to be monitored for core file
serverList="root@server1 root@server2 root@server50"

for server in $serverList
do
    #core file
    log="/tmp/coreFiles.log"

    ssh $server find / -type f -name core >$log

    if [ -s $log] then
       echo "core files for server $server" | mail -s "Core files found" xyz@abc.com < $log
    fi      

done
于 2012-07-05T08:55:10.570 回答