systemd is hanging when I start or restart a service
I'm new to systemd after upgrading to 16.04 and I'm encountering a problem with starting and restarting services. When I run (for example)...
systemctl start djalbat.com
...it seems to work, however I don't get the prompt back, it just appears to hang. If I ctrl-c
to get the prompt back and then test whether the service has started, it appears to have done so. I wonder what there is in the configuration that would cause this to happen? Here it is:
[Unit]
Description=djalbat.com
[Service]
Type=forking
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log
[Install]
WantedBy=multi-user.target
Also, if someone could point out the need for the last WantedBy
directive, that would be appreciated.
So it turned out that the command that is executed with the ExecStart
configuration did not fork whereas the systemd
service was configured for a forking executable. This lead systemctl
to wait for the for of the executable leading to a not returning command line.
The correct configuration for an executable that does not fork is to use Type=simple
.
[Unit]
Description=djalbat.com
[Service]
Type=simple
WorkingDirectory=/var/www/djalbat.com/
ExecStart=/usr/bin/node ./bin/main.js start 2>&1 >> /var/log/djalbat.com.log
[Install]
WantedBy=multi-user.target
The WantedBy
is needed to connect this unit with a target, so this unit or service is started automatically when the appropriate target is reached and the service is enabled to start automatically with
systemctl enable djalbat
Don't forget to refresh systemd
after you have made changes to your service files with
systemctl daemon-reload