Používám desktop Ubuntu 14. Tento stroj používám k zálohování jiných strojů a jako FTP server pro bezpečnostní kamery.
Potřebuji vytvořit úlohu cron, která automaticky odstraní soubory starší než 30 dní. Trochu jsem hledal a myslím, že jsem našel správný příkaz, ale před jeho provedením se chci ujistit, že mi něco nechybí.
* 4 * * * find /home/USER/DIRECTORY1/DIRECTORY2/ -mindepth 1 -type f -mtime 29 -delete
Musím před příkaz find vložit „sudo“?
Musím dát „+“ před počet dní „29“?
Přijatá odpověď:
Nejprve vložte svůj find ...
příkaz v bash
skript a zavolejte tento skript z vašeho crontab
. Pokud máte zašifrovaný domovský adresář (cat /home/.ecryptfs/$USER/.ecryptfs/Private.mnt
) budete muset skript uložit mimo svůj $HOME
adresářový strom. Uchování příkazu v crontab
ztěžuje konfiguraci, protokolování a ladění a crontab
parser příkazů není tak chytrý jako bash
‘s.
Za druhé, vždy, Vždy, VŽDY test find
pomocí -print
, a zprovozněte jej, než zvážíte -delete
.
Za třetí, find
test “-mtime 29
” říká find
„Najděte mtime
souboru a vrátí True
pokud se rovná 29
. Měli byste použít -mtime +29
, které find
vidí jako „more than 29
“, což je to, co chcete. Z man find
:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
Za čtvrté, ujistěte se, že máte přístup pro zápis do adresářů v /home/USER/DIRECTORY1/DIRECTORY2/
.
Za páté, máte na mysli /home/USER/DIRECTORY1/DIRECTORY2/
nebo /home/$USER/DIRECTORY1/DIRECTORY2/
? Pokud $USER
je pro uživatelské ID uživatele, máte problém:cron
nedefinuje $USER
v běhovém prostředí. Definuje $HOME
, takže můžete použít $HOME/DIRECTORY1/DIRECTORY2
.