Как скрипт установки SystemD, созданный sbt debian:packageBin
, устанавливает разрешения для webapp для записи в PID /var/run
или в подкаталог?.deb для SystemD, созданный с debian: packageBin for Play 2.4.2 Приложение не имеет Permisison для создания журнала
Только root имеет разрешение на создание файла pid
в /var/run
или для создания каталога, такого как /var/run/myWebApp/
, который содержит файл pid
. Задача debian:packageBin
заставляет webapp запускаться как специальный user:group
, созданный с именем webapp. Если каталог создается как /var/run/myWebApp
, группе myWebApp
требуется разрешение на запись, но я не вижу способа сделать это автоматически. Я что-то упускаю?
Вот некоторые из моих конфигурационных файлов:
dist/conf/application.ini
:
-Dpidfile.path=/var/run/webapp2/webapp2.pid
conf/application.conf
:
# This seems redundant ... should it be removed?
pidfile.path = /var/run/webapp2/pid
pidfile.path = ${?pidfile.path}
debian.sbt
:
import com.typesafe.sbt.packager.archetypes.ServerLoader.{Systemd, SystemV, Upstart}
import com.typesafe.sbt.SbtNativePackager.autoImport._
lazy val root = (project in file(".")).enablePlugins(PlayScala, DebianPlugin)
enablePlugins(JavaAppPackaging)
enablePlugins(JDebPackaging)
enablePlugins(JavaServerAppPackaging)
serverLoading in Debian := Systemd
maintainer in Linux := "Mike Slinn <[email protected]>"
packageSummary in Linux := "myWebApp blah blah"
packageDescription := "myWebApp blah blah"
daemonUser in Linux := normalizedName.value // user which will execute the application, resolves to "myWebApp"
daemonGroup in Linux := (daemonUser in Linux).value // group which will execute the application, resolves to "myWebApp"
Дополнение:
Play manages its own pid.. Я не смог получить ${{app_name}}
для расширения, поэтому вместо этого я закодировал myWebApp
.
sbt-native-packager docs говорят, что pid должен быть помещен в /var/run/myWebApp
и журналы в /var/log/myWebApp
.
/var/run
имеет разрешение 777 имеет символическое обозначение /run
с разрешением 775; оба принадлежат root:root
. Таким образом, единственный способ для не-root-процесса можно записать в /var/run
для создания каталога под /var/run
с соответствующими разрешениями. Например, postgres:postgres
имеет разрешение на запись /var/run/postgres
:
$ ls -adlF /var/run/postgresql
drwxrwsr-x 3 postgres postgres 120 Aug 28 01:17 /var/run/postgresql/
Это как Плэй документы показывают размещения ИДП в /var/run
должны работать, однако это не работает для меня.
Это должно быть сделано автоматически, вы пробовали настроить? – kardapoltsev
Да, я пробовал, и это не сработало, как описано –
-Dpidfile.path =/var/run/webapp2/pid, а ваше имя приложения - myWebApp? Не могли бы вы вывести вывод ls -l/var/run/myWebApp? – kardapoltsev