Мій nohup.out
файл швидко зростає.
Я запускаю програму у фоновому режимі, вона пише nohup.out
файл,
тепер мені потрібно обертати nohup.out
файл, не вбиваючи мою програму. Це можна зробити?
Мій nohup.out
файл швидко зростає.
Я запускаю програму у фоновому режимі, вона пише nohup.out
файл,
тепер мені потрібно обертати nohup.out
файл, не вбиваючи мою програму. Це можна зробити?
Відповіді:
Вам слід поглянути на філог у поєднанні з logrotate
. Якщо ви передаєте вихідний додаток через це, ви зможете SIGHUP
виконувати процес блокування, не вбиваючи запущену програму.
flog (file logger) - програма, яка зчитує вхід зі STDIN і записує у файл.
Якщо буде отримано SIGHUP, файл буде відновлено, що дозволить обертати журнал [див. Логротат (8) на RH.]
Файл журналу буде відкрито лише тоді, коли flog виявить, що відбулося обертання (тобто, старий файл відійшов або змінено inode). plog надзвичайно малий (менше 500 байт пам'яті).
To save output to FILE, use 'nohup COMMAND > FILE'
Ви не можете його обертати. Ви можете обрізати його командою >nohup.out
, яка видалить увесь вміст у файлі.
Ви можете скопіювати файл спочатку, а потім обрізати його, якщо вам потрібно зберегти вихід. Але є невелике вікно для гонки, де вихід може бути записаний після того, як ви скопіювали файл, але перед тим, як його врізати. Будь-який вихід, написаний під час цього вікна, буде назавжди загублений.
copytruncate
в logrotate
. Але nohup.out
рідко буває такий тип файлу, який ви могли б налаштувати роботу cron на обертання.
Ви не можете.
Ви можете від’єднати файл (rm), але дані все-таки мають на диску диски, і вони продовжуватимуться записуватись до тих пір, поки буде відкрита ручка файлу.
Ви можете перейменувати файл, але знову ж таки це не зупиняє його запис (але якщо ви регулярно запускаєте фонові завдання, новіші будуть записувати в той самий файл).
Дійсно, ви повинні явно перенаправити висновок завдання на щось, призначене для цього (наприклад, роталоги апатів ).
Не впевнений, чи я спізнююсь із цим. Але для інших, хто зараз натрапляє на цей форум, мені не довелося нічого випробовувати за допомогою лома або чогось іншого.
Моя робота починається просто так:
nohup <my process> &
Це запускає мою роботу і починає додавати до nohup.out у цьому каталозі.
Все, що мені потрібно було зробити, це встановити логротат, який зазвичай постачається з дистрибутивом, і налаштувати щось подібне в /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
І це працювало !! nohup.out стає усіченим, отримуючи нові додатки до того ж файлу. Процес теж не загинув. І створено новий nohup.out подібний nohup.out-20190528
.
Сподіваюсь, це допомагає.
У Logrotate є опція copytruncate, яка уріже (порожнє) вказаний файл після того, як він буде скопійований у звичайну схему обертання (та стиснення, якщо встановлено).
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.
Ви можете зробити щось подібне:
cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out
Не потрібно вбивати додаток.