Próbuję napisać skrypt uniksowy, który obetnie / opróżni plik, który jest ciągle zapisywany / otwierany przez aplikację, gdy osiągnie, powiedzmy, 3 GB miejsca. Wiem, że poniższe polecenie by to zrobiło:
cp /dev/null [filename]
Ale mam zamiar uruchomić to w środowisku produkcyjnym automatycznie jako zadanie cron - po prostu publikując tutaj, aby zobaczyć, czy napotkaliście jakieś problemy podczas robienia czegoś podobnego.
logrotate
to, może to zapewnić ci jakąś wartość (ale denerwuj się przy jej ustawianiu (tylko zgadywanie)!).Odpowiedzi:
Aby dodać kolejną odpowiedź,
:
nie jest operacją w bash (zgodnym z POSIX), więc zasadniczo otwiera plik do zapisu (co oczywiście obcina plik), a następnie natychmiast go zamyka.EDYCJA: jak skomentował shellter, tak naprawdę nie potrzebujesz polecenia, aby wykonać przekierowanie:
$ echo foo > foo.txt $ cat foo.txt foo $ > foo.txt $ cat foo.txt $
Samo proste przekierowanie wyczyści plik.
źródło
> filename
(jak na pewno wiesz). Powodzenia wszystkim.Użyłem następującego polecenia w debianie
źródło
sudo sh -c ': > filename'
również obciętefilename
sudo
:sudo cp /dev/null filename
.cp
Jest również przenośny, podczas gdytruncate
jest tylko nowoczesny Linux.Wydaje mi się to rozsądne. Oczywiście Unix pozwoliłby ci to zrobić na około 50 różnych sposobów. Na przykład,
echo -n "" >filename cat /dev/null >filename
źródło
trunc filename
działa na wersji UNIX AIX
źródło