3

I am running Arch Linux. I have a service on /etc/systemd/system/ with the following description

[Unit]
After=network.target

[Service]
Type=simple
ExecStart=(...)service.py
ExecReload=(...)service.py
Restart=always

I set it to start after the network is established as it depends on a network connection.

When I boot the PC, the service is always inactive. If I start it manually it runs perfectly. It also restarts if there is some internal error. Why does it not start on boot?

EDIT

When enabling the service I get this message:

➜ ~ systemctl enable py_service.service
The unit files have no installation config (WantedBy, RequiredBy, Also, Alias settings in the [Install] section, and DefaultInstance for template units). This means they are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: 1) A unit may be statically enabled by being symlinked from another unit's .wants/ or .requires/ directory. 2) A unit's purpose may be to act as a helper for some other unit which has a requirement dependency on it. 3) A unit may be started when needed via activation (socket, path, timer, D-Bus, udev, scripted systemctl call, ...). 4) In case of template units, the unit is meant to be enabled with some instance name specified.

1) it is not symlinked

2) it is not a helper

3) I thought this was covered by the After=network...

4) I do not know what this means

EDIT 2 Following the suggestion of @dustball, I edited to:

cat /etc/systemd/system/py_service.service 
[Install]
WantedBy=multi-user.target

[Unit]
After=network.target

[Service]
Type=simple
ExecStart=(...)service.py
ExecReload=(...)service.py
Restart=always

But it did not start on boot :(

EDIT 3 The above configuration works, I forgot to enable it (thanks to @Daniel H) reload the services using

sudo systemctl daemon-reload

and then enable it using

systemctl enable py_service.service

migrated from stackoverflow.com Jan 16 '17 at 20:53

This question came from our site for professional and enthusiast programmers.

  • 1
    Have you enabled the service? Also, this question might be better suited for Unix & Linux – Lev Levitsky Jan 16 '17 at 13:45
  • Have you considered adding a WantedBy, RequiredBy or some of the other suggested fields to the unit? – Wieland Jan 17 '17 at 13:26
  • @Wieland I do not know what to add there as it is a contained service. Any suggestions? – Camandros Jan 17 '17 at 17:33
  • Have you tried looking at the journal, with journalctl --unit <unit name> for example? – airhuff Jan 18 '17 at 5:57
  • the journalctl shows that if the service crashes it correctly restarts, but after boot there is no data, the service starting was done manually by me – Camandros Jan 18 '17 at 11:19
7

The error message already gives you the answer (partially). Services have an [Install] section. The only option in there is "WantedBy=". For a service to be enabled, it must be wanted by a target.

Example: NetworkManager has "WantedBy=network.target", so when you enable NetworkManager, it's grouped into network.target, and started as soon as systemd starts network.target

Think of it like the runlevels in SysV-init, a daemon must be inserted into a runlevel, otherwise... when should it start?

A safe default is to set "WantedBy=multi-user.target", it's the last one that's started.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.