Может ли / tmp в Linux когда-либо заполняться? - PullRequest
7 голосов
/ 11 февраля 2009

Я помещаю некоторые файлы в / tmp на веб-сервер, которые используются веб-приложением в течение ограниченного периода времени. Если файлы остаются в / tmp сервера после того, как пользователь выходит из приложения, и это происходит неоднократно, следует ли мне беспокоиться о заполнении каталога? Я читал в Интернете, что перезагрузка очищает каталог / tmp, но эта коробка перезагружается не очень.

Tom

Ответы [ 8 ]

17 голосов
/ 11 февраля 2009

Да, он заполнится. Подумайте о реализации задания cron, которое через некоторое время удалит старые файлы.

Нечто подобное должно сработать:

/usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \;

Это приведет к удалению файлов, время модификации которых превышает дневную.

Или как запись в crontab:

   # run five minutes after midnight, every day
   5 0 * * *       /usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \;

где / tmp / mydata - это подкаталог, в котором ваше приложение хранит свои временные файлы. (Простое удаление старых файлов в / tmp было бы очень плохой идеей, как кто-то еще указал здесь.)

Посмотрите на crontab и найдите man-страницы для подробностей. Не запускайте сценарии, которые удаляют файлы в вашей файловой системе, не разбираясь во всех деталях - вот как плохо происходит с хорошими серверами. :)

Конечно, если вы можете просто изменить свое приложение для удаления временных файлов, когда оно будет сделано с ними, это, как правило, будет гораздо лучшим решением.

5 голосов
/ 11 февраля 2009

Единственное, что вы можете написать, не беспокоясь, что оно заполнится, это / dev / null . Все остальное в конечном итоге закончится, если вы продолжите сбрасывать в него вещи.

Один из простых подходов состоит в том, чтобы задание cron очистило все ваши / tmp файлы, которые старше, скажем, на несколько дней.

4 голосов
/ 11 февраля 2009

Да. Он будет связан с одним из ваших дисков / разделов и может заполниться. Он удаляется при перезагрузке.

Когда пользователь выходит из приложения, вы должны очистить файлы после них.

3 голосов
/ 11 февраля 2009

Вы не можете просто слепо удалить все, что не было изменено в течение определенного времени. Многие программы хранят сокеты, которые никогда не изменяются, но все еще являются неотъемлемой частью работы программы. Возьмите, например, mysql с одного из моих серверов:

srwxrwxrwx    1 mysql    mysql           0 Sep 11 04:01 mysql.sock=

Это действующий рабочий файл в / tmp. Это выглядит старым, потому что mysql не был перезапущен некоторое время. Либо ограничьте свою находку с помощью '-type f' или '-atime', либо используйте один из предоставленных дистрибутивом инструментов, упомянутых другими.

1 голос
/ 11 февраля 2009

На каком языке ваше веб-приложение? Многие языки предлагают временные файлы:

Поиск на вашем языке, если есть такая функция.

0 голосов
/ 11 февраля 2009

Просто предупреждение: не все установки Linux очищают каталог / tmp после каждой перезагрузки

0 голосов
/ 11 февраля 2009

Многие дистрибутивы Linux включают в себя что-то с именем 'tmpwatch' или аналогичное, которое запускается через cron и удаляет объекты по предопределенному градиенту. Некоторые из них достаточно умны, чтобы обращаться к владельцу файла ... вещи, принадлежащие пользователям демонов, вычищаются быстрее, чем вещи, принадлежащие обычным пользователям. Проверьте списки рассылки для вашего дистрибутива, чтобы узнать.

Тем не менее, у вас должен быть SNMP или какой-либо другой монитор, который следит за тем, сколько свободного места доступно, если он заполняет такие службы, как Apache, которые вам не понравятся. Например, e-ускорителю для PHP потребуется много места, некоторые почтовые сканеры не очищаются должным образом и т. Д.

0 голосов
/ 11 февраля 2009

В некоторых дистрибутивах Linux есть пакет, который очистит старые файлы в / tmp для вас. Это не сложно реализовать самостоятельно, как уже упоминалось выше. Стоит обратить внимание на длительные процессы, особенно «зомби», которые умерли, но еще не закончили убирать за собой. Если у процесса есть открытый файл, простое удаление его из / tmp на самом деле не освободит его место - вы должны убить процесс или каким-то образом принудить его закрыть файл. Многие программы, которые пишут журналы или временные файлы, предназначены для перехвата сигнала (часто SIGUSR1) и закрытия и повторного открытия любых журналов или временных файлов по этой причине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...