Есть ли безопасный способ автоматического удаления случайных файлов Unix-сокета до того, как будут запущены соответствующие сервисы?

Я бегу Дафни от супервизора на Ubuntu 18.04 с --unix-socket возможность привязки к сокету Unix, а не к хосту / порту TCP:

command=daphne --unix-socket /home/project/run/daphne.sock project.asgi:application

После сбоя питания экземпляр файла daphne.sock был оставлен позади, и после перезагрузки Дафни отказалась запускаться, пока я вручную не удалил оскорбительный файл.

Есть ли способ безопасно удалить файл при запуске системы перед запуском супервизора?

Я понимаю, что это не является проблемой, специфичной для Daphne, и может повлиять на другие компоненты, такие как PostgreSQL, поэтому любое предложение, подходящее для очистки файлов перед службами, запущенными либо супервизором, либо systemd, будет высоко оценено

1 ответ

Решение

Использование tmpfs например, создать файл внутри /dev/shm,

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

[Акцент мой]

В моем Debian /run это также tmpfs и я вижу, что несколько инструментов создали свои гнезда там. По данным FHS /run хорошее место для сокета, созданного общесистемным сервисом.

Переменные времени выполнения: информация о работающей системе с момента последней загрузки, например, вошедшие в систему пользователи и работающие демоны. Файлы в этом каталоге должны быть удалены или усечены в начале процесса загрузки; но это не обязательно в системах, которые предоставляют этот каталог как временную файловую систему (tmpfs).

В моем Debian /run принадлежит корню и его биты режима (разрешения) rwxr-xr-x, Обычные пользователи не могут извлечь из этого пользу.

С другой стороны /dev/shm является rwxrwxrwt, любой может использовать это. Но так как это "общая земля" (как /tmp), мало проблем возникает. Возможность конфликта имен является одним из них. Два пользователя могут мешать друг другу, даже если их намерения совершенно безвредны.

Тогда есть /run/user/$uid также как tmpfs:

используется для хранения файлов, используемых запущенными процессами для этого пользователя. [...]
Этот каталог является локальным для системы и доступен только целевому пользователю. Поэтому приложениям, которые хотят хранить свои файлы локально, больше не нужно беспокоиться об управлении доступом.

Другие вопросы по тегам