Должен ли мой pid-файл находиться в / var / run?

62

Я спрашиваю в обоих контекстах: технически и стилистически.

Может ли мое приложение/демон сохранить pidfile в /opt/my_app/run/?

Неужели это плохо?

Моя потребность такова: мой демон работает под определенным пользователем, а разработчик должен mkdir создать новый каталог в /var/run, chown и chgrp, чтобы запустить мой демон. Кажется, проще просто сохранить pidfile локально (для демона).

Теги:
pid

4 ответа

79
Лучший ответ

Я бы не поставил pidfile в каталог установки приложения, например /opt/my_app/whatever. Этот каталог может быть смонтирован только для чтения, может быть разделен между машинами, может наблюдаться демона, который рассматривает любые изменения там как возможную попытку взлома...

Обычным местом для pidfiles является /var/run. Большинство устройств очистит этот каталог при загрузке; в Ubuntu это достигается с помощью /var/run файловой системы в памяти (tmpfs).

Если вы запустите своего демона из script, который работает от имени пользователя root, создайте подкаталог /var/run/gmooredaemon и передайте его пользователю, работающему с демоном, до su ing для пользователя и запустите демон. В противном случае выберите местоположение под /tmp или /var/tmp, но это добавит дополнительную сложность, потому что имя pidfile не может быть определено однозначно, если оно находится в каталоге, доступном для записи в мире.

В любом случае упростите (вариант командной строки, а также, возможно, параметр времени компиляции) для дистрибьютора или администратора, чтобы изменить местоположение pidfile.

  • 0
    / run теперь доступен для записи только владельцу (root). Как приложения пишут pid-файл?
  • 0
    @TSG Современные дистрибутивы обычно создают каталог для пользователя в /run/user . Я не помню, чтобы /run сам когда-либо был доступен для записи всем. Но pid-файлы в /run являются общими, тем не менее, они являются нормой для системных служб. Pid-файл написан супервизором, который запускается от имени пользователя root, или с помощью сценария запуска, который запускается от имени пользователя root, прежде чем он запустит фактического демона с возможно уменьшенными привилегиями.
Показать ещё 1 комментарий
9

/opt используется для установки "автономных" приложений, поэтому ничего плохого здесь нет. Использование /opt/my_app/etc/ для конфигурационных файлов, /opt/my_app/log/ для журналов и т.д. - обычная практика для такого типа приложений.

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

6

Другое соглашение, если вы не используете script как root, заключается в том, чтобы поместить pidfile в ~/.my_app/my_app.pid. Это проще, хотя и безопасно, поскольку домашний каталог не может записываться в мир.

  • 1
    Это было бы хорошо, если бы каждый пользователь мог запускать экземпляр вашего приложения без конфликтов. В противном случае я бы придерживался / var / run
6

Местоположение файла pid должно быть настраиваемым. /var/run является стандартным для файлов pid, так же, как /var/log является стандартным для журналов. Но ваш демон должен позволить вам перезаписать этот параметр в каком-то файле конфигурации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню