CoreOS "Executable path is not absolute" error in systemctl

October 8, 2014 28.9k views

Hello,
I have a droplet with CoreOS and system reboots once a two/three days accidentally. After every reboot I need to restart my docker containers. To get it I create systemd unit ***.service with the next structure:

[Unit]
Description=*** service
After=docker.service
[Service]
ExecStart="/usr/bin/docker run -d -p 80:80 *** /usr/sbin/apache2ctl -D FOREGROUND"
[Install]
WantedBy=multi-user.target

When I try to start it as:

sudo systemctl start ***.service

It crashes with error:

Oct 08 07:18:47 *** systemd[1]: [/etc/systemd/system/***.service:6] Executable path is not absolute, ignoring: "/usr/bin/docker run -d -p 80:80 *** /...-D FOREGROUND"
Oct 08 07:18:47 *** systemd[1]: ***.service lacks ExecStart setting. Refusing.

How can I restrict CoreOS accidental reboots?
And how can I fix my error with systemctl?

Thanks in advance!

1 Answer

The problem seems to be due to the ExecStart arguments being quoted. To confirm this I just tried this unit file:

[Unit]
Description=apache service
After=docker.service
[Service]
ExecStart=/usr/bin/docker run -d -p 80:80 coreos/apache /usr/sbin/apache2ctl -D FOREGROUND
[Install]
WantedBy=multi-user.target

Without quotes, it runs as expected. With them, it fails with:

systemd[1]: [/etc/systemd/system/apache.service:5] Executable path is not absolute, ignoring: "/usr/bi...GROUND"
systemd[1]: apache.service lacks ExecStart setting. Refusing.
systemd[1]: [/etc/systemd/system/apache.service:5] Executable path is not absolute, ignoring: "/usr/bi...GROUND"
systemd[1]: apache.service lacks ExecStart setting. Refusing.

Have another answer? Share your knowledge.