Идиоматическое местоположение для основанных на файле сокетов в системах Debian

Вызов halt, shutdown или reboot от cron более чистое решение, потому что d-bus просто система обмена сообщениями, и крон уже звонит как корень. Но если необходимо сказать о завершении работы другому приложения через d-шину, попытайтесь назвать это:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
12
02.03.2018, 05:20
1 ответ

Они обычно находятся в /tmp или подкаталог этого. Обратите внимание что все в /tmp подвергается стиранию на завершении работы - не, что оно обязательно стирается, просто остерегайтесь этого, это может быть, поэтому при использовании этого проверьте, необходимо ли создать подкаталог каждый раз. Вы захотите использовать подкаталог, если Вы захотите ограничить доступ с помощью полномочий с тех пор /tmp читаемый мир.

/run и /var/run (который может быть symlinked вместе), используются похожим способом, но они обычно монтируются как tmpfs файловые системы - значение, что они создаются при начальной загрузке и находятся в памяти, не на диске (так не используйте это в качестве места для дампа обильных объемов данных). Для сокета во время выполнения это - вероятно, хороший выбор.

Отметьте это /run, и все другие каталоги, упомянутые здесь кроме /tmp, только перезаписываемы корнем. Для системного процесса это прекрасно, но если приложение может быть запущено непривилегированным пользователем, Вы любой хочет использовать /tmp или создайте постоянный каталог где-нибудь и установите полномочия на этом или используйте местоположение в $HOME пользователя.

Возможно создать каталог в /usr/share (или /usr/local/share) во время установки. Каталоги и содержание там потенциально не пожинают через начальные загрузки, как они были бы в /tmp или /run. Однако, поскольку jordanm указывает в комментариях, /usr может быть смонтирован только для чтения, и инструкции по иерархии файловой системы Linux отражают это. Конечно, это не может быть только для чтения, когда Ваше приложение установлено, поэтому если Вы - удобное создание сокета там затем, можно оставить его и использовать его позже (Вы все еще сможете записать в сокет даже при том, что файл только для чтения).

Если Вы хотите где-нибудь персистентный через начальные загрузки, которые не будут смонтированы только для чтения, /etc довольно безопасная ставка, так как это часто используется для конфигураций в масштабе всей системы и реконфигурирований. OTOH, возможно иметь системы, где устройство, лежащее в основе всей корневой файловой системы, только для чтения (например, встроенные системы), с/tmp и/, выполненным на другом устройстве (вероятно: tmpfs в памяти). Так два большинство устойчивых стратегий, казалось бы, было бы:

  • Установите сокет на постоянном местоположении, когда приложение будет установлено.

  • Создайте каталог в /run или /var/run во времени выполнения и помещенный сокет там.

  • Сделайте то же самое только в /tmp.

Преимущество первого состоит в том что независимо от того, что, после того как приложение установлено, у Вас будет сокет для использования. Преимущество второго состоит в том, что это может более способствовать нормальному программированию. Преимущество третьего - это, не требует полномочий суперпользователя. Должно быть легко переключиться от одной реализации до другого, если Вы передумали позже.

Наконец, поскольку BatchyX поднял, необходимо, по крайней мере, предложить параметр конфигурации для этого, возвратившись выбору значения по умолчанию.

17
27.01.2020, 19:55
  • 1
    /run или /var/run также часто используется для корневых процессов. –  BatchyX 24.08.2013, 22:52
  • 2
    Право. Это - еще больше tmp, чем /tmp. Я отредактирую это в. –  goldilocks 24.08.2013, 22:56
  • 3
    /usr может быть смонтирован как только для чтения. Файлы никогда не должны создаваться там во времени выполнения. Другие предложения хороши. –  jordanm 25.08.2013, 00:03
  • 4
    за Ваш вход, обсуждение было очень информативно. Я решил сделать местоположение по умолчанию /tmp/.APPNAME/.APPSOCK потому что у демона нет потребности в персистентных данных. –  recursion.ninja 25.08.2013, 05:28
  • 5
    Другое основное отличие между /tmp и /run, тот единственный корень, имеет полномочия записи на /run. –  BatchyX 25.08.2013, 10:46

Теги

Похожие вопросы