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

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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