Xargs rm não funciona ao executá-lo em um script como parte de um core_pattern

1

Estou tentando executar um script de limpeza que é chamado em cada dump principal. Primeiro escrevi o conteúdo do arquivo principal para outro arquivo e depois tentei fazer uma limpeza nos dez arquivos mais antigos.

No entanto, o xargs rm não funciona quando o script é invocado por meio de um core_dump. Quando eu executo o script sozinho, o rm funciona.

/ proc / sys / kernel / core_pattern:

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

arquivo cleanup.sh

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

Se eu fizer o seguinte para excluir arquivos, ele funciona. Mas preciso excluir apenas os arquivos x mais antigos.

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

Alguém pode lançar alguma luz?

    
por Mozbi 21.09.2018 / 19:30

1 resposta

2

ls -tr /tmp/cores não lista os caminhos completos dos arquivos, mas apenas seus nomes de base.

Experimente ls -tr /tmp/cores/* | ... .

Mas você não precisa disso - já que todos os nomes de arquivos estão no formato core.%t ( %t = unix time of dump), você pode simplesmente confiar no glob para classificá-los. Além disso, não faz sentido remover 10 arquivos depois de adicionar apenas um - depois de várias etapas, você não terá mais arquivos no diretório.

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