【问题标题】:Find Core File in multiple machine在多台机器中查找核心文件
【发布时间】:2012-07-05 06:41:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: linux perl admin perl-module administration


    【解决方案1】:

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

    find / -type f -name core
    

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

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

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

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

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

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

    • 由于所有核心文件都在一个位置,因此根据需要轮询新文件更为合理。

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

    【讨论】:

    • 非常感谢您回复我。所以我创建了 Perl 脚本,它搜索核心文件并在存在任何核心文件时向我发送邮件。
    【解决方案2】:

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

    find / -name core
    

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

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

        猜你喜欢
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        • 1970-01-01
        • 2019-12-06
        • 1970-01-01
        • 2023-04-06
        相关资源
        最近更新 更多