Xargs rm 在脚本中作为 core_pattern 的一部分运行时不起作用

Xargs rm 在脚本中作为 core_pattern 的一部分运行时不起作用

我正在尝试运行一个在每个核心转储上调用的清理脚本。我首先将核心文件的内容写入另一个文件,然后尝试对最旧的十个文件进行清理。

但是,xargs rm当通过 core_dump 调用脚本时,该命令不起作用。当我单独运行脚本时,rm 可以工作。

/proc/sys/kernel/core_pattern:

|core_cleanup.sh /tmp/cores/core.%t

清理.sh 文件

#!/bin/sh 
cat > "$1"
ls -tr /tmp/cores/ | head -10 | xargs rm

如果我执行以下操作来删除文件,它就会起作用。但我只需要删除最旧的 x 文件。

#!/bin/sh 
cat > "$1"
rm /tmp/cores

有人可以透露一些信息吗?

答案1

ls -tr /tmp/cores不列出文件的完整路径,而仅列出它们的基本名称。

尝试ls -tr /tmp/cores/* | ...一下。

但您不需要所有这些 - 因为所有文件名都是这种形式core.%t%t= unix 转储时间),您可以简单地依靠 glob 来对它们进行排序。另外,在只添加一个文件后删除 10 个文件是没有意义的——经过一系列步骤后,目录中将不再有任何文件。

#! /bin/sh
cat > "$1"
# remove the oldest file if there are more than 100 
cleanup(){ test "$#" -gt 100 && rm "$1" }
cleanup /tmp/cores/*

相关内容