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).
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.
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 ).
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
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.
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.
Odpowiedzi:
Powinieneś spojrzeć na flog w połączeniu z
logrotate
. Jeśli przepuścisz przez to wynik swojej aplikacji, możesz wtedy wykonaćSIGHUP
proces flogowania bez konieczności zabijania uruchomionej aplikacji.źródło
To save output to FILE, use 'nohup COMMAND > FILE'
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.
źródło
copytruncate
inlogrotate
. Alenohup.out
rzadko jest to rodzaj pliku, który można skonfigurować do obracania zadania cron.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 ).
źródło
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:
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
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.
źródło
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).
Z strony podręcznika Logrotate .
źródło
Możesz zrobić coś takiego:
Nie musisz zabijać swojej aplikacji.
źródło