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.
7 lines
111 B
Plaintext
7 lines
111 B
Plaintext
[Unit]
|
|
StopWhenUnneeded=true
|
|
Wants=<%= process_master_names.join(' ') %>
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|