Как удалить содержимое файла error.log, но сохранить его без изменений

25

Я хочу стереть содержимое файла error.log (файл журнала ошибок nginx), но на самом деле я не хочу его удалять.

Это возможно?

работает убунту

user27449
источник

Ответы:

68

Вы можете использовать это:

>error.log

(набирается просто так - пустое перенаправление вывода)

или

truncate -s0 error.log
Приостановлено до дальнейшего уведомления.
источник
@Ignacio: если файл уже существует, он будет обрезан. Если файл не существует, либо создаст его.
Приостановлено до дальнейшего уведомления.
Ты прав, мой плохой.
Игнасио Васкес-Абрамс
Последний вариант у меня сработал, по некоторым причинам sudo> error.log у меня не сработал (ubuntu 12.04)
davidkonrad
5
@davidkonrad: Вы должны уже иметь права root, чтобы перенаправление работало, поскольку оно выполнено до того, как sudoвступит в силу. Или вы можете сделатьsudo bash -c '>error.log'
Пауза до дальнейшего уведомления.
1
@ divHelper11: В своем ответе я говорю, что это «перенаправление пустого вывода». Это означает, что «ничто» не отправляется в указанный файл, и это перезаписывает любое существующее содержимое. Это похоже на, echo "some words" > output.txtно ничего не происходит.
Приостановлено до дальнейшего уведомления.
1

Вы перепутаете демона. Сотрите файл и отправьте SIGHUPна nginx.

Игнасио Васкес-Абрамс
источник
SIGHUP? Не могу ли я закрыть nginx, очистить файл и начать? Я хочу знать, как стереть файл для знания также.
user27449
Если бы вы хотели, конечно. Но это нарушит обслуживание.
Игнасио Васкес-Абрамс
Я думаю, что как нулевое перенаправление, так и a truncateявляются атомарными, поэтому до тех пор, пока не происходит поиск (особенно если добавляется только выполняемая операция), это не должно быть разрушительным.
Приостановлено до дальнейшего уведомления.