Пропали все sh скрипты и текстовые файлы

Автор vigilant, 04 октября 2016, 14:54:14

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

vigilant

Пару раз сталкивался с непонятной проблемой исчезновения файлов, встречалась она мне как на Raspbian, так, вчера, встретилась и на Debian 7 x64.
Выглядит всё так: сервер работает месяцами и всё хорошо, в /home/ а то и в /root/ лежит N-е количество sh скриптов, которые исполняются по крону, некоторые пишут лог в .txt файлы, которые лежат там же. Скрипты занимаются обработкой и сохранением неких изображений и видео, не суть важно.

Всё это работает, работает, потом в какой-то момент по недосмотру кончается свободное место на диске, и работать перестает) И тут два варианта развития событий:

1, что видел на распбиане: места нет, сразу же пропадают все sh файлы, текстовые файлы, python, короче, все текстовые файлы исчезают в неизвестность, при этом все картинки и видео на своих местах
2, что вчера видел на Debian 7: место закончилось, удалил лишние файлы, ничего никуда не пропало, проработало целый день, 15% диска свободно, затем ночью сами по себе пропадают все скрипты из разных папок, все текстовые файлы, ключи, логи. Остаются картинки, видео, файлы шрифтов..

Что происходит-то с системой? Варианты "сам случайно удалил", "кто-то зашел и удалил" не рассматриваем, на это ничто не указывает. Пытался гуглить похожую проблему, но не нагуглил ничего путного.

Я могу понять, что как-то грохаются файлы логов, куда скрипт пытается что-то дописать, а места на диске нету, хотя и оно странно. Но сами скрипты почему растворяются?.. Этого понять не могу никак.


Cообщение объединено 05 Октябрь 2016, 00:39:00

восстановился из бекапа и опять та же история, только что пропали все скрипты, все текстовое
что за чертовщина? куда копать? не понимаю :(

Cообщение объединено 05 октября 2016, 01:34:38

В общем, я нашёл проблему. Не очевидная была, зараза.

А дело было так: скрипты ежедневно создают папки вида dd_mm_yyyy, куда складывают изображения. Потом другой скрипт идёт во вчерашнюю папку и проверяет, нету ли там файлов меньше 30 килобайт, а если есть - удаляет их.
И выглядела эта конструкция примерно так:

cd /путь/к/папке/дд_мм_уууу
find -size -30k -delete

Все круто до тех пор, пока /путь/к/папке/дд_мм_уууу существует... Твою же мать. Find без дополнительных опций работает во всю глубину вложенных папок. Вот он обламывался с CD и запускался из рута, снося все файлы меньше 30К, в том числе и все короткие логи со скриптами. А т.к. ситуация, когда папка не создалась, очень редкая, то и проблема всплывала тоже очень очень редко. Вынос мозга, блин.

Мораль сей басни такова: повнимательнее с удалением любых файлов и путь к этому удалению указывай прям в вызове команды этого самого удаления, а то останешься в дураках :)

endru

Не используйте относительные пути при удалении файлов. Всегда нужно использовать абсолютные пути.
Уж если так хочется использовать относительный путь к файлам - обязательно делайте проверку на существование директории, в которой будут удаляться файлы.