Julián Perelli    Projects    Blog    Talks

Adding systemd simple service in ubuntu 15.04

I was trying to add a simple service to run just one time at boot, but it was a little difficult and I couldn’t find the information easily, so I’ll share the commands here:

Create file /etc/systemd/system/startallvagrant.service with this contents

1
2
3
4
5
6
7
8
9
[Unit]
Description=Start all vagrant machines

[Service]
Type=oneshot
ExecStart=/vagrant_vm/start-all-2015.sh

[Install]
WantedBy=multi-user.target

Create symlink from multi-user.target.wants:

1
# ln -s /etc/systemd/system/startallvagrant.service /etc/systemd/system/multi-user.target.wants/startallvagrant.service

Enable/activate the service in systemd

1
# systemctl enable startallvagrant.service

Check if configuration is working

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
root@breadboard:~# systemctl list-unit-files

UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
systemd-ask-password-console.path static
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
session-1.scope static
session-2.scope static
accounts-daemon.service enabled
acpid.service disabled
atd.service enabled
autovt@.service disabled
bootlogd.service masked
bootlogs.service masked
bootmisc.service masked
checkfs.service masked
checkroot-bootclean.service masked
checkroot.service masked
console-getty.service disabled
console-setup.service static
console-shell.service disabled
container-getty@.service static
cron.service enabled
cryptdisks-early.service masked
cryptdisks.service masked
dbus-org.freedesktop.hostname1.service static
dbus-org.freedesktop.locale1.service static
dbus-org.freedesktop.login1.service static
dbus-org.freedesktop.machine1.service static
dbus-org.freedesktop.network1.service disabled
dbus-org.freedesktop.resolve1.service disabled
dbus-org.freedesktop.timedate1.service static
dbus.service static
debian-fixup.service static
...skipping...
startallvagrant.service enabled
stop-bootlogd-single.service masked
stop-bootlogd.service masked
sudo.service disabled
syslog.service enabled
systemd-ask-password-console.service static
systemd-ask-password-plymouth.service static
root@breadboard:~#

Check if the service worked / started ok

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@breadboard:~# systemctl status startallvagrant.service 

● startallvagrant.service - Start all vagrant machines
Loaded: loaded (/etc/systemd/system/startallvagrant.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2015-08-06 18:30:11 CEST; 6min ago
Process: 854 ExecStart=/vagrant-vm/start-all-2015.sh (code=exited, status=203/EXEC)
Main PID: 854 (code=exited, status=203/EXEC)

Aug 06 18:30:11 breadboard systemd[1]: Starting Start all vagrant machines...
Aug 06 18:30:11 breadboard systemd[1]: startallvagrant.service: main process exited, code=exited, status=203/EXEC
Aug 06 18:30:11 breadboard systemd[1]: Failed to start Start all vagrant machines.
Aug 06 18:30:11 breadboard systemd[1]: Unit startallvagrant.service entered failed state.
Aug 06 18:30:11 breadboard systemd[1]: startallvagrant.service failed.
root@breadboard:~# journalctl _PID=854
-- Logs begin at Thu 2015-08-06 18:30:08 CEST, end at Thu 2015-08-06 18:33:40 CEST. --
Aug 06 18:30:11 breadboard systemd[854]: Failed at step EXEC spawning /vagrant-vm/start-all-2015.sh: No such file or directory
root@breadboard:~#

See if something else has failed

1
2
3
4
5
6
7
8
9
10
11
12
root@breadboard:~# systemctl --failed --all

UNIT LOAD ACTIVE SUB DESCRIPTION
● startallvagrant.service loaded failed failed Start all vagrant machines

LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.

1 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.
root@breadboard:~#