crontab es regebbi fajlok torlese

Fórumok

Sziasztok,

crontab -e
paranccsal a
30 7 * * * /usr/bin/find /share/tmp -mtime +1 -exec /usr/bin/rm {} \;

sort irtam be, de reggel 7:30-kor nem csinalt semmit.
(a cron mukodik, mert a
25 7 * * * /usr/bin/bdf >/share/tmp/bdf_before_removal.txt;
lefut).
Megmaradtak a Marcius 22-en letrehozott fajlok.
Ha jol tudom, a -mtime +1 az 1 napnal regebbi fajlokat torli.

2097365 Mar 22 03:37 OSS_
2097369 Mar 22 03:38 OSS_
2097312 Mar 22 03:40 OSS_
2097224 Mar 22 03:41 OSS_
2097214 Mar 22 03:42 OSS_
2097225 Mar 22 03:43 OSS_
2097261 Mar 22 03:45 OSS_
2097249 Mar 22 03:46 OSS_
2097217 Mar 22 03:47 OSS_
2097293 Mar 22 03:48 OSS_
2097340 Mar 22 03:50 OSS_
2097292 Mar 22 03:51 OSS_
2097412 Mar 22 03:52 OSS_
2097391 Mar 22 03:53 OSS_
2097344 Mar 22 03:54 OSS_
2097272 Mar 22 03:56 OSS_
2097244 Mar 22 03:57 OSS_
2097289 Mar 22 03:58 OSS_
2097265 Mar 22 03:59 OSS_
2097288 Mar 22 04:01 OSS_
.
.
.
Tudna valaki segiteni, hogyan toroljem pl. a 12 oranal regebbi fajlokat a /share/tmp konyvtarbol?
Koszonom a segitseget.

ardi

Hozzászólások

-cmin +720 ez törli a 12 óránál régebbieket és a -cmin -720 pedig a 12 órán belülieket.

A {} elől és mögül hiányzik egy-egy ' szerintem meg lehet egy -f is kellene bele... Nálam így néz ki igaz nem HP unixon:
/bin/rm -f '{}'

koszi szepen,

azt hiszem, a find eleg hulyen viselkedik.
Ha jol tudom, az -mtime +1 az 1 napnal (pontosabban 24 oranal regebbi)/az -mtime -1 az 1 napnal "fiatalabb"/24 oran beluli fajlokkal csinal valamit.
Nekem megis hulyen reagal a rendszer:
find /share/tmp/ -mtime -1 -exec ls -al {} \;

kilistazta most (16:09,26-Mar-2010) a
Mar 24,Mar 25,Mar 26-ai fajlokat is.

find /share/tmp/ -mtime +1 -exec ls -al {} \;
csupan a Mar 24-ei fajlokat

Hogyan is mukodik tehat az -mtime opcio?

ardi

man find:

-atime n
File was last accessed n*24 hours ago. When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.

-mtime n
File's data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretation of file modification times.

csaba@karmic:~$ which rm
/bin/rm

Persze lehet, hogy HP-UX alatt nem ott van.

Lezárnád az időzett szöveget [ / code ] paranccsal? Így elég nehezen olvashatóak a hozzászólások.

Ave, Saabi.

Emlekeim szerint a HP-UX find csak egesz napokat enged hasznalni, de a GNU find biztosan fordithato HP-UX alatt is, es akkor hasznalhatod azt, vagy pedig probalkozhatsz egy ilyesmi perl programot hivni a cronbol:


#! /usr/bin/env perl

use strict;
use warnings;
use File::Find;

my $t = time;
find(
  { wanted => sub {
      return if not -f;
      #print "$_\n" if $t - ( stat _ )[9] > 12 * 3600;
      #return;
      my $rv = unlink if $t - ( stat _ )[9] > 12 * 3600;
      warn "cannot delete file [$_]: $!" if not $rv;
    },
    no_chdir => 1,
    follow   => 0,
  },
  "/share/tmp"
);

Mindenkepp jatssz vele egy kicsit a csak printelo valtozatban, mielott hagyod hogy toroljon is, mert nem vallalok felelosseget, ha olyasmit is torol, amit nem kellett volna. ;-)

Avagy egy harmadik opcio, hogy valahol letrehozol egy ures file-t, touch-csal beallitod a modification time-ot 12 oraval korabbra, aztan

find ! -newer timestampfile ...

formaban torolsz.

Én azért csak megnézném azt a levelet a cron kimenetével. (Illetve a /var/adm/cron/log fájlt, hogy mi van a futtatásról). Ami leginkább gyanús, hogy pl. a hp-ux man-ban sehol nem szerepel az az egyszerű információ, hogy a cron pl. sh -c 'parancs' formátumban futtatja-e azt a szerencsétlen parancsot, vagy ő maga végez rajta némi feldolgozást (pl. ;-t és | -ot már láttam hapukszos crontab-fájlban), szóval egyáltalán nem vagyok biztos benne, hogy a parancslezáró ; elé a crontab-ban is kell-e a \ . Viszont a problémát megkerülendő, próbáld meg ezt a POSIX-szabványos megoldást:


..... -exec rm {} +

A -exec (vagy -ok) utáni + megegyezik a \; -gal, két különbség van: nem kell a shell elől takarni (speciel ez hibásan van a HP-UX manualban), és nem minden megtalált fájlnévvel fut le egyesével, hanem összegyűjt annyit amennyit tud, és azzal. A második fele nyilván sokat segít teljesítményben, az első pedig a fenti probléma kiküszöbölése kapcsán *lehet* érdekes.

Hello Zahy,

a /var/adm/cron/log file-ban a kovetkezo van:

CMD: /usr/bin/bdf >/share/tmp/bdf_before_removal.txt;
root 3154 c Mon Mar 29 00:25:00 GMT 2010
root 3154 c Mon Mar 29 00:25:00 GMT 2010
CMD: /usr/bin/find /share/tmp -mtime +1 -exec /usr/bin/rm {} \;
root 5124 c Mon Mar 29 00:30:00 GMT 2010
root 5124 c Mon Mar 29 00:30:01 GMT 2010
CMD: /usr/bin/bdf >/share/tmp/bdf_before_removal.txt;
root 13725 c Mon Mar 29 06:25:00 GMT 2010
root 13725 c Mon Mar 29 06:25:00 GMT 2010
CMD: /usr/bin/find /share/tmp -mtime +1 -exec /usr/bin/rm {} \;
root 15709 c Mon Mar 29 06:30:00 GMT 2010
root 15709 c Mon Mar 29 06:30:00 GMT 2010

Szoval nem latok itt semmi hibat.

Kiprobalom a ..... -exec rm {} +
beirast holnap reggel. (Koszi a tippet.)
ardi


# date
Mon Mar 29 12:50:56 METDST 2010
# ls -l
total 0
-rw-r--r--   1 root       sys              0 Mar 29 11:47 file1
-rw-r--r--   1 root       sys              0 Mar 29 11:47 file2
-rw-r--r--   1 root       sys              0 Mar 29 11:47 file3
-rw-r--r--   1 root       sys              0 Mar 29 11:47 file4
-rw-r--r--   1 root       sys              0 Mar 28 11:47 fileold1
-rw-r--r--   1 root       sys              0 Mar 28 11:47 fileold2
-rw-r--r--   1 root       sys              0 Mar 27 11:47 fileold3
-rw-r--r--   1 root       sys              0 Mar 27 11:47 fileold4
# find . -mtime 1 -exec /usr/bin/ls -l {} +
-rw-r--r--   1 root       sys              0 Mar 28 11:47 ./fileold1
-rw-r--r--   1 root       sys              0 Mar 28 11:47 ./fileold2
# find . -mtime +1 -exec /usr/bin/ls -l {} +
-rw-r--r--   1 root       sys              0 Mar 27 11:47 ./fileold3
-rw-r--r--   1 root       sys              0 Mar 27 11:47 ./fileold4
#

Vannak egy napnál _régebbi_ file-jaid? Mint láthatod, 29-én a "+1" nem listázza a 28-i file-okat, csak az "1"!

Ave, Saabi.

Es miert jelzi 2x a fajlokat?

Mert a find megtalalja az aktualis konyvtarat (.) is, mint ami kevesebb mint egy napja valtozott (hiszen letrejottek uj file-ok stb.), es igy egy ilyesmi ls parancs fut:

ls . file1 file2 fileN

A nem megfelelo datumu file-ok az

ls .

kimenetehez tartoznak.
Ezt alapvetoen ket modon kerulheted meg. Vagy csak a file-okra findolsz:

$ find . -type f ...

vagy a konyvtarakat nem tartalmuk, hanem nevuk szerint listazod:

$ find ... -exec ls -dal {} +

Ha kesobb torolni akarod oket listazas helyett, akkor nyilvan a

-type f

valtozat a nyero.