You are not logged in.

#1 2016-01-04 10:10:22

ugjka
Member
From: Latvia
Registered: 2014-04-01
Posts: 1,812
Website

[Solved] Starting systemd service after gaining access to the internet

Hello! I'm trying to start an Irc bot with systemd after connection is established with netctl-auto@.service over wifi.

I have configured netctl to start network-online.target after it finishes it job

[ugjka@ArchPC ~]$ cat /etc/netctl/hooks/status 
#!/bin/sh
ExecUpPost="systemctl start network-online.target"
ExecDownPre="systemctl stop network-online.target"

This is the unit for the irc bot

[ugjka@ArchPC ~]$ cat /etc/systemd/system/flipbot.service 
[Unit]
Description=FlipBot
After=network-online.target 
Wants=network-online.target 

[Service]
Type=idle
ExecStart=/home/ugjka/goworks/bin/flipbot
User=ugjka
Group=users

[Install]
WantedBy=multi-user.target

When I boot the system systemd reaches target network-online before connection to my network is established and thus my bot fails.

jan 04 11:29:07 ArchPC kernel: IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
jan 04 11:29:07 ArchPC wpa_actiond[510]: Starting wpa_actiond session for interface 'wlan0'
jan 04 11:29:07 ArchPC systemd[1]: Started Automatic wireless network connection using netctl profiles.
jan 04 11:29:07 ArchPC systemd[1]: Reached target Network.
jan 04 11:29:07 ArchPC systemd[1]: Reached target Network is Online.
jan 04 11:29:07 ArchPC systemd[1]: Started FlipBot.
jan 04 11:29:07 ArchPC systemd[1]: Started SzRadio.
jan 04 11:29:07 ArchPC systemd[1]: Reached target Multi-User System.
jan 04 11:29:07 ArchPC systemd[1]: Reached target Graphical Interface.
jan 04 11:29:07 ArchPC systemd[1]: Startup finished in 2.652s (kernel) + 6.887s (userspace) = 9.539s.
jan 04 11:29:07 ArchPC flipbot[511]: t=2016-01-04T11:29:07+0200 lvl=dbug msg="Starting bot goroutines" id=fc8157caeee3b84a host=irc.freenode.net:6667 nick=flipbot
jan 04 11:29:07 ArchPC flipbot[511]: t=2016-01-04T11:29:07+0200 lvl=info msg="Couldnt restablish connection, no prior bot." id=fc8157caeee3b84a host=irc.freenode.net:6667 nick=flipbot err="dial unix @irc.freenode.net:6667-flipbot/bot: connect: connection refused"
jan 04 11:29:07 ArchPC flipbot[511]: t=2016-01-04T11:29:07+0200 lvl=dbug msg=Hijack id=fc8157caeee3b84a host=irc.freenode.net:6667 nick=flipbot Did we?=false
jan 04 11:29:07 ArchPC flipbot[511]: t=2016-01-04T11:29:07+0200 lvl=dbug msg=Connecting id=fc8157caeee3b84a host=irc.freenode.net:6667 nick=flipbot
jan 04 11:29:07 ArchPC flipbot[511]: t=2016-01-04T11:29:07+0200 lvl=crit msg="bot.Connect error" id=fc8157caeee3b84a host=irc.freenode.net:6667 nick=flipbot err="dial tcp: lookup irc.freenode.net on 192.168.1.1:53: dial udp 192.168.1.1:53: connect: network is unreachable"
jan 04 11:29:07 ArchPC flipbot[511]: Bot shutting down.
jan 04 11:29:07 ArchPC szradio[512]: main.go:25: szradio online
jan 04 11:29:08 ArchPC kernel: wlan0: authenticate with c8:60:00:af:d6:44
jan 04 11:29:08 ArchPC kernel: wlan0: send auth to c8:60:00:af:d6:44 (try 1/3)
jan 04 11:29:08 ArchPC kernel: wlan0: authenticated
jan 04 11:29:08 ArchPC kernel: wlan0: associate with c8:60:00:af:d6:44 (try 1/3)
jan 04 11:29:08 ArchPC kernel: wlan0: RX AssocResp from c8:60:00:af:d6:44 (capab=0x411 status=0 aid=2)
jan 04 11:29:08 ArchPC kernel: IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
jan 04 11:29:08 ArchPC kernel: wlan0: associated
jan 04 11:29:09 ArchPC kernel: sha256_ssse3: Using SSSE3 optimized SHA-256 implementation
jan 04 11:29:09 ArchPC wpa_actiond[510]: Interface 'wlan0' connected to network 'Druvas'
jan 04 11:29:09 ArchPC kernel: r8169 0000:09:00.0 enp9s0: rtl_counters_cond == 1 (loop: 1000, delay: 10).
jan 04 11:29:09 ArchPC dhcpcd[586]: DUID 00:01:00:01:1d:85:9c:c0:b8:ac:6f:7c:83:f8
jan 04 11:29:09 ArchPC dhcpcd[586]: wlan0: IAID a1:cf:e4:31
jan 04 11:29:09 ArchPC kernel: IPv6: wlan0: IPv6 duplicate address fe80::72f1:a1ff:fecf:e431 detected!
jan 04 11:29:09 ArchPC dhcpcd[586]: wlan0: rebinding lease of 192.168.1.60
jan 04 11:29:09 ArchPC dhcpcd[586]: wlan0: probing address 192.168.1.60/24
jan 04 11:29:15 ArchPC dhcpcd[586]: wlan0: leased 192.168.1.60 for 86400 seconds
jan 04 11:29:15 ArchPC dhcpcd[586]: wlan0: adding route to 192.168.1.0/24
jan 04 11:29:15 ArchPC dhcpcd[586]: wlan0: adding default route via 192.168.1.1
jan 04 11:29:15 ArchPC dhcpcd[586]: forked to background, child pid 630
jan 04 11:29:18 ArchPC kernel: random: nonblocking pool is initialized
jan 04 11:29:31 ArchPC systemd-timesyncd[376]: Synchronized to time server 85.254.216.1:123 (2.arch.pool.ntp.org).
jan 04 11:32:12 ArchPC kernel: wlan0: deauthenticated from c8:60:00:af:d6:44 (Reason: 3=DEAUTH_LEAVING)
jan 04 11:32:12 ArchPC wpa_actiond[510]: Interface 'wlan0' lost connection to network 'Druvas'
jan 04 11:32:13 ArchPC kernel: wlan0: authenticate with c8:60:00:af:d6:44
jan 04 11:32:13 ArchPC kernel: wlan0: send auth to c8:60:00:af:d6:44 (try 1/3)
jan 04 11:32:13 ArchPC kernel: wlan0: authenticated
jan 04 11:32:13 ArchPC kernel: wlan0: associate with c8:60:00:af:d6:44 (try 1/3)
jan 04 11:32:13 ArchPC kernel: wlan0: RX AssocResp from c8:60:00:af:d6:44 (capab=0x411 status=0 aid=2)
jan 04 11:32:13 ArchPC kernel: wlan0: associated
jan 04 11:32:14 ArchPC wpa_actiond[510]: Interface 'wlan0' reestablished connection to network 'Druvas'
jan 04 11:33:06 ArchPC dbus[383]: [system] Activating via systemd: service name='org.freedesktop.PolicyKit1' unit='polkit.service'
jan 04 11:33:06 ArchPC systemd[1]: Starting Authorization Manager...

Any Ideas what I'm doing wrong?

Last edited by ugjka (2016-01-04 13:33:09)


https://ugjka.net
paru > yay | webcord > discord
pacman -S spotify-launcher
mount /dev/disk/by-...

Offline

#2 2016-01-04 11:18:15

Raynman
Member
Registered: 2011-10-22
Posts: 1,539

Re: [Solved] Starting systemd service after gaining access to the internet

flipbot.service pulls in network-online.target. If this target has no dependencies that delay its start-up sequence until the network is up, it finishes starting too early.

If you want to use netctl hooks, make netctl start flipbot.service (or a target that collects this and other network-dependent services). Otherwise, make sure a network is established as part of network-online.target's startup. That means hooking netctl up to it using dependencies in the unit files, similar to what is done for NetworkManager (slightly messy) or systemd-networkd (simpler/cleaner).

Last edited by Raynman (2016-01-04 11:18:29)

Offline

#3 2016-01-04 13:32:38

ugjka
Member
From: Latvia
Registered: 2014-04-01
Posts: 1,812
Website

Re: [Solved] Starting systemd service after gaining access to the internet

Ok, thanks.

I kept the netctl hook but I needed to chmod +x it And then I only needed to change WantedBy= in my service file to network-online.target

[Unit]
Description=FlipBot

[Service]
Type=idle
ExecStart=/home/ugjka/goworks/bin/flipbot
User=ugjka
Group=users
Restart=always
RestartSec=30

[Install]
WantedBy=network-online.target

https://ugjka.net
paru > yay | webcord > discord
pacman -S spotify-launcher
mount /dev/disk/by-...

Offline

Board footer

Powered by FluxBB