如何为播放应用程序创建systemd单元文件

时间:2017-08-24 13:33:38

标签: playframework systemd

我对编写单元文件的过程感到满意,但是我不知道如何布局的是ExecStart(及其他相关的)的内容。

我已经获得了一个播放应用程序的命令行,该命令行只是声明:

cd /play_home_dir
activator run

有人可以帮我把这些命令放在单元文件中吗?或者解释我如何使用单位文件执行上述任务?

2 个答案:

答案 0 :(得分:0)

您需要先创建一个发行版:例如sbt universal:package-zip-tarball。这创建了应用程序的二进制分发。

在系统方面:

[Unit]
Description=service1
After=multi-user.target

[Service]
Type=simple
ExecStartPre=/bin/rm -f /usr/local/play/service1/RUNNING_PID
ExecStart=/usr/local/play/service1/bin/service1 -J-Xmx5120m -J-Xms3072m -J-server -Dlogger.file=/usr/local/play/service1/conf/application-live.xml -Dconfig.file=/usr/local/play/service1/conf/application-live.conf
User=play
Group=play
TimeoutStopSec=10
LimitNOFILE=10240

[Install]
WantedBy=multi-user.target

假设:

应用程序名为service1,在application-live.xml中具有记录器配置,在application-live.conf中具有应用程序配置。

答案 1 :(得分:0)

我在生产中使用以下注释的系统单元文件。 将{{app_name}}替换为您播放项目的名称。 {{app_version.stdout}}是build.sbt中指定的项目版本 我正在致电complex x, y(3) x%im = 1. x%re = 0. y = (2., 1.) print *, y(2)%im+y(3)%re 并在play dist上传zip。

/opt

我注意到在hardpoweroff之后,游戏启动失败了因为postgresql还没有,因此[Unit] Description=The {{ app_name }} After=network.target After=postgresql.service [Service] # Source environment for application EnvironmentFile=/home/{{ app_name }}/app.env EnvironmentFile=/home/{{ app_name }}/{{ env }}.env # Up Evolutions should be safe on Production # Down Evolutions are to be avoided ExecStart=/opt/{{ app_name }}-{{ app_version.stdout }}/bin/{{ app_name }} \ -Dhttp.address=localhost \ -DapplyEvolutions.default=true \ -Dpidfile.path=/var/run/{{ app_name }}/{{ app_name }}.pid User={{ app_name }} Group={{ app_name }} WorkingDirectory=/opt/{{ app_name }}-{{ app_version.stdout }} # Ensure /var/run/ {{ app_name }} is created before creating the pidfile RuntimeDirectory={{ app_name }} # See http://serverfault.com/a/695863 SuccessExitStatus=143 [Install] WantedBy=multi-user.target

我选择将我的应用程序配置放在环境变量中, 遵循https://12factor.net/config的建议,所以我使用After=postgresql.service指令来获取它们。