Есть ли безопасный способ автоматического удаления случайных файлов 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
:
используется для хранения файлов, используемых запущенными процессами для этого пользователя. [...]
Этот каталог является локальным для системы и доступен только целевому пользователю. Поэтому приложениям, которые хотят хранить свои файлы локально, больше не нужно беспокоиться об управлении доступом.