jak obrócić plik nohup.out bez zabijania mojej aplikacji


10

Mój nohup.outplik szybko rośnie.

Korzystam z aplikacji w tle, piszę nohup.outplik,

teraz muszę obrócić nohup.outplik bez zabijania mojej aplikacji. Czy można to zrobić?


Skopiuj, a następnie obetnij.
Jenny D

Może stracić cenne wpisy dziennika między tymi dwoma operacjami, które zasugerowałeś. Nie polecałbym tego.
Cleankod

Odpowiedzi:


6

Powinieneś spojrzeć na flog w połączeniu z logrotate. Jeśli przepuścisz przez to wynik swojej aplikacji, możesz wtedy wykonać SIGHUPproces flogowania bez konieczności zabijania uruchomionej aplikacji.

flog (logger plików) to program, który odczytuje dane wejściowe ze STDIN i zapisuje do pliku.

Jeśli otrzymano SIGHUP, plik zostanie ponownie otwarty, umożliwiając rotację logów [patrz logrotate (8) na RH.]

Plik dziennika zostanie ponownie otwarty tylko wtedy, gdy flog wykryje, że nastąpił obrót (tj. Stary plik zniknął lub zmieniono i-węzeł). bicz jest wyjątkowo mały (mniej niż 500 bajtów pamięci).


Czy nohup może używać potoku zamiast nohup.out?
Brian Minton

1
Możesz użyć przekierowania pliku (>), aby wyprowadzić do pliku innego niż nohup.out zgodnie ze stroną To save output to FILE, use 'nohup COMMAND > FILE'
podręcznika

4

Nie możesz go obrócić. Możesz go skrócić za pomocą polecenia >nohup.out, które spowoduje usunięcie całej zawartości pliku.

Możesz najpierw skopiować plik, a następnie go obciąć, jeśli chcesz zapisać wynik. Ale jest małe okno dla wyścigu, w którym dane wyjściowe można zapisać po skopiowaniu pliku, ale przed jego obcięciem. Wszelkie dane wyjściowe zapisane w tym oknie zostaną na zawsze utracone.


1
Uważam, że obcięcie nie zwolni miejsca na dysku, dopóki uchwyt pliku nie zostanie zamknięty.
symcbean

@symcbean Twoje przekonanie jest nieprawidłowe. Obcinanie pliku natychmiast zwalnia miejsce.
kasperd

Logrotate copytruncate powinno załatwić sprawę.
user9517,

@Inow Kroki, które opisuję, są równoważne z copytruncatein logrotate. Ale nohup.outrzadko jest to rodzaj pliku, który można skonfigurować do obracania zadania cron.
kasperd

2

Nie możesz

Możesz odłączyć plik (rm), ale dane nadal mają ślad na dysku i będą zapisywane tak długo, jak długo będzie otwarty uchwyt pliku.

Możesz zmienić nazwę pliku - ale znowu nie powstrzymuje to jego zapisu (ale jeśli regularnie uruchamiasz zadania w tle, nowsze będą zapisywać do tego samego pliku).

Naprawdę powinieneś wyraźnie przekierować wyjście zadania do czegoś zaprojektowanego do obsługi tego (np. Rotatelogi apache ).


logrotate copytruncate ktoś?
user9517

Zależy to całkowicie od tego, czy nohup dołącza wiersz po wierszu nohup.out, czy też utrzymuje wskaźnik do lokalizacji nohup.out. Zobacz serverfault.com/questions/221337/... dla przykładu.
pepoluan

2

Nie jestem pewien, czy jestem za późno. Ale dla innych, którzy natkną się teraz na to forum, nie musiałem wypróbowywać niczego za pomocą chłosty lub czegokolwiek.

Moja praca zaczyna się tak:

nohup <my process> &

To zaczyna moją pracę i zaczyna dołączać do nohup.out w tym katalogu.

Wszystko, co musiałem zrobić, to skonfigurować logrotate, który zwykle pochodzi z dystrybucją i skonfigurować coś takiego /etc/logrotate.conf

~/my abosolute path/nohup.out {
    size 1024k
    copytruncate
    rotate 100
    maxage 100
}

I zadziałało !! nohup.out został obcięty podczas pobierania nowych załączników do tego samego pliku. Proces też nie umarł. I powstał nowy taki nohup.out nohup.out-20190528.

Mam nadzieję że to pomoże.


1

Logrotate ma dostępną opcję copytruncate, która obetnie (opróżni) określony plik po skopiowaniu go do normalnego schematu obrotu (i kompresji, jeśli jest ustawiony).

   copytruncate
          Truncate  the  original log file in place after creating a copy,
          instead of moving the old log file and optionally creating a new
          one,  It  can be used when some program can not be told to close
          its logfile and thus might continue writing (appending)  to  the
          previous log file forever.  Note that there is a very small time
          slice between copying the file and truncating it, so  some  log-
          ging  data  might be lost.  When this option is used, the create
          option will have no effect, as the old log file stays in  place.

Z strony podręcznika Logrotate .


1

Możesz zrobić coś takiego:

cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out

Nie musisz zabijać swojej aplikacji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.