Страница 1 из 1

Как удалить файл даже если он занят др процессом

Добавлено: 2018.11.28, 14:57
Solutions
Добрый вечер, подскажите пожалуйста правильный алгоритм удаления файла даже если к нему кто то уже обратился? (если что нам глубоко плевать кто там с ним работает :D ;) ) Спасибо.

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.11.29, 14:37
Solutions
Solutions писал(а): 2018.11.28, 14:57 Добрый вечер, подскажите пожалуйста правильный алгоритм удаления файла даже если к нему кто то уже обратился? (если что нам глубоко плевать кто там с ним работает :D ;) ) Спасибо.
Совсем ни у кого нет идей?

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.11.30, 21:42
samdark
Какая операционная система? Под кем запущен ваш процесс и другой процесс?

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.12.02, 10:57
Solutions
samdark писал(а): 2018.11.30, 21:42 Какая операционная система? Под кем запущен ваш процесс и другой процесс?
аудио файл находиться на сервере ubuntu 14.04, к нему обращаются, воспроизводят через браузер, пользователи по средствам веб приложения написанного на yii2, можно конечно написать try catch, но хочется удалять даже если занят файл. Спасибо внимание.

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.12.05, 00:04
samdark
Если файл открыт, то он будет открыт, удалили ли его или нет. На самом деле удаляется только ссылка на ноду в файловой системе и пока хоть одна ссылка есть, файл по факту не удалён. Вам, скорее всего, придётся или дождаться пока файл отпустят, либо завершить процесс, его использующий.

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.12.05, 07:40
Solutions
samdark писал(а): 2018.12.05, 00:04 Если файл открыт, то он будет открыт, удалили ли его или нет. На самом деле удаляется только ссылка на ноду в файловой системе и пока хоть одна ссылка есть, файл по факту не удалён. Вам, скорее всего, придётся или дождаться пока файл отпустят, либо завершить процесс, его использующий.
Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл? или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.12.05, 13:07
samdark
Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл?
Никак. Yii не может сделать то, что невозможно в файловой системе.
Или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?
Вот так да, можно. Ставьте в базе флаг "на удаление" и по крону, например, раз в пару часов пробегайтесь по таким записям.

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.12.06, 11:24
Solutions
samdark писал(а): 2018.12.05, 13:07
Вопрос к Вам, как заставить Yii2 игнорировать это все и удалять файл?
Никак. Yii не может сделать то, что невозможно в файловой системе.
Или хотя бы удалять запись из бд, а потом при проверке что файл свободен удалять и его?
Вот так да, можно. Ставьте в базе флаг "на удаление" и по крону, например, раз в пару часов пробегайтесь по таким записям.
Это прикольно, но к сожалению у меня нет опыта в этом, подскажите куда рыть что бы это реализовать как это реализовать?

Re: Как удалить файл даже если он занят др процессом

Добавлено: 2018.12.06, 16:40
S c
1) есть у вас таблица в БД хранящая ваши файлы? Если есть - то добавляем в неё дополнительную колонку "на удаление", с типом int/tiny int (со значениями 1/0), либо bool (true/false), все зависит от вашего хранилища данных и его возможностей. если нет таблицы отдельной для файлов - создаем новую, например "files_to_delete", в ней к примеру колонки: id; path (или просто имя файла, если path (пусть к файлу) у вас забит в конфиге, к примеру)
2) в том коде, где вы подошли к удалению файла, просто этот файл в вашей БД помечаем "к удалению". То есть добавляешь в вашу БД инфу, что файл нужно удалить. Если вы создали отдельную таблицу для этого функционала - тогда на этом шаге просто в новую таблицу добавляем запись, просто путь файла, который нужно удалить
3) пишем свою консольную команду, использую инструментарий yii
https://www.yiiframework.com/doc/guide/ ... te-command
В ней просто берем все записи с новой таблицы и пытаемся удалить каждый файл. в случае успеха - удаляем запись об удаленном файле с этой таблицы.
4) добавляем в cron вызов вашей консольной команды раз в день, к примеру. Вот что такое крон - https://help.ubuntu.ru/wiki/cron (или 100500 аналогичных статей в инете)