Mam 8 milionów plików w mojej/tmp i muszę je usunąć. Na tym serwerze działa również bardzo ważna aplikacja i nie mogę jej przeciążać.Usuwanie ogromnej ilości plików
używam mały skrypt PHP:
<?php
$dir = "/tmp";
$dh = opendir($dir);
$i = 0;
while (($file = readdir($dh)) !== false) {
$file = "$dir/$file";
if (is_file($file) && (preg_match("/open/", $file))) {
unlink($file);
#echo $file;
if (!(++$i % 10000)) {
echo "$i files removed\n";
}
}
}
?>
ale to sprawia, że moja aplikacja nieosiągalny, nawet z: $ ionice C3 php ./tmp_files_killer.php $ miły -n 20 php ./ tmp_files_killer.php
zmieniłem mój skrypt tak, że nie będzie czytać/tmp reż cały czas:
$ ls -1 /tmp > tmp_files_list.txt
<?php
$file = "tmp_files_list.txt";
$infile = fopen($file, "r");
while (!feof($infile)) {
$line = rtrim(fgets($infile), "\n\r");
if ($line != null){
$file = "$dir/$line";
unlink($file);
if (!(++$i % 10000)) {
echo "$i files removed\n";
}
# echo $line + "\n";
}
}
?>
ale działa ten skrypt również spowalnia moja aplikacja. Proces nie ładuje procesora i mam dość pamięci.
Faceci, jak usunąć te pliki?
Nie możesz tego zrobić w wierszu poleceń? Czy musisz je usuwać tylko raz lub w regularnych odstępach czasu? Być może tworzenie cronjob, który usuwa stałą liczbę plików w regularnych odstępach czasu. – pritaeas