Вызов 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
Они обычно находятся в /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 поднял, необходимо, по крайней мере, предложить параметр конфигурации для этого, возвратившись выбору значения по умолчанию.
/run
или/var/run
также часто используется для корневых процессов. – BatchyX 24.08.2013, 22:52/tmp
. Я отредактирую это в. – goldilocks 24.08.2013, 22:56/usr
может быть смонтирован как только для чтения. Файлы никогда не должны создаваться там во времени выполнения. Другие предложения хороши. – jordanm 25.08.2013, 00:03/tmp/.APPNAME/.APPSOCK
потому что у демона нет потребности в персистентных данных. – recursion.ninja 25.08.2013, 05:28/tmp
и/run
, тот единственный корень, имеет полномочия записи на/run
. – BatchyX 25.08.2013, 10:46