With the previous way systemd services were exported, you had to enable every single process one by one to get the service operational.
Consider the following Procfile:
web: bundle exec thin start
worker: bundle exec worker start
Exported with:
foreman export systemd /usr/lib/systemd/system -a myapp -c worker=3
You will have to perform the following to start the service:
systemctl enable myapp-web-1.service
systemctl enable myapp-worker-1.service
systemctl enable myapp-worker-2.service
systemctl enable myapp-worker-3.service
systemctl enable myapp-web.target
systemctl enable myapp-worker.target
systemctl start myapp.target
Thats 7 commands, and you have to know the names of each service. Nasty.
With the changes here, you will have to perform the following:
systemctl enable myapp.target
systemctl start myapp.target
You can also `systemctl start myapp.target` without enabling as well. Previously if you tried to start `myapp.target` without enabling each individual process it would not work.
---
Additionally, this change also adds the dependency to 'multi-user.target' (the default behavior for all services). This will properly shut down (or start) the app when the system changes runlevels. The previous method did not do this.
16 lines
374 B
Plaintext
16 lines
374 B
Plaintext
[Unit]
|
|
StopWhenUnneeded=true
|
|
|
|
[Service]
|
|
User=<%= user %>
|
|
WorkingDirectory=<%= engine.root %>
|
|
Environment=PORT=<%= port %><% engine.env.each_pair do |var,env| %>
|
|
Environment=<%= var.upcase %>=<%= env %><% end %>
|
|
ExecStart=/bin/bash -lc '<%= process.command %>'
|
|
Restart=always
|
|
StandardInput=null
|
|
StandardOutput=syslog
|
|
StandardError=syslog
|
|
SyslogIdentifier=%n
|
|
KillMode=process
|