Skip to content

Commit d1af377

Browse files
authored
feat: systemd timer unit to restart network on NDisc failure (#971)
1 parent 9e7f9eb commit d1af377

File tree

5 files changed

+69
-0
lines changed

5 files changed

+69
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[Unit]
2+
Description=Check if systemd-networkd has broken NDisc routes and fix
3+
4+
[Service]
5+
Type=oneshot
6+
# This needs to be root for the service restart to work
7+
User=root
8+
Group=root
9+
ExecStart=/usr/local/bin/systemd-networkd-check-and-fix.sh
10+
11+
Requisite=systemd-networkd.service
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash
2+
3+
# Check for occurrences of an NDisc log error
4+
# NOTE: --since timer flag must match the cadence of systemd timer unit. Risk of repeat matches and restart loop
5+
journalctl --no-pager --unit systemd-networkd --since "1 minutes ago" --grep "Could not set NDisc route" >/dev/null
6+
NDISC_ERROR=$?
7+
8+
if systemctl is-active --quiet systemd-networkd.service && [ "${NDISC_ERROR}" == 0 ]; then
9+
echo "$(date) systemd-network running but NDisc routes are broken. Restarting systemd.networkd.system"
10+
/usr/bin/systemctl restart systemd-networkd.service
11+
fi
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[Unit]
2+
Description=Check if systemd-networkd has broken NDisc routes and fix
3+
4+
[Timer]
5+
# NOTE: cadence must match that of the journalctl search (--since). Risk of repeat matches and restart loop
6+
OnCalendar=minutely
7+
8+
[Install]
9+
WantedBy=timers.target

ansible/playbook.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@
7171
tags:
7272
- install-supabase-internal
7373

74+
- name: Fix IPv6 NDisc issues
75+
import_tasks: tasks/fix_ipv6_ndisc.yml
76+
tags:
77+
- install-supabase-internal
78+
7479
- name: Start Postgres Database
7580
systemd:
7681
name: postgresql

ansible/tasks/fix_ipv6_ndisc.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
- name: fix Network - systemd timer file
3+
copy:
4+
dest: /etc/systemd/system/systemd-networkd-check-and-fix.timer
5+
src: "files/systemd-networkd/systemd-networkd-check-and-fix.timer"
6+
owner: root
7+
group: root
8+
mode: 0644
9+
10+
- name: fix Network - systemd service file
11+
copy:
12+
dest: /etc/systemd/system/systemd-networkd-check-and-fix.service
13+
src: "files/systemd-networkd/systemd-networkd-check-and-fix.service"
14+
owner: root
15+
group: root
16+
mode: 0644
17+
18+
- name: fix Network - detect script
19+
copy:
20+
dest: /usr/local/bin/systemd-networkd-check-and-fix.sh
21+
src: "files/systemd-networkd/systemd-networkd-check-and-fix.sh"
22+
owner: root
23+
group: root
24+
mode: 0700
25+
26+
- name: fix Network - reload systemd
27+
systemd:
28+
daemon_reload: yes
29+
30+
- name: fix Network - enable systemd timer
31+
systemd:
32+
name: systemd-networkd-check-and-fix.timer
33+
enabled: true

0 commit comments

Comments
 (0)