Position Log
Persistent station position history across restarts
By default, graywolf keeps station positions in memory only — a restart clears the live map. The position log feature writes station data to a separate SQLite database so the map is populated immediately after a restart. Positions are retained for 30 days and automatically pruned.
Enabling the Position Log
Open Settings → Position Log in the web UI and
toggle Enable persistent position log. The database path is
shown read-only; it is set by the service manager via the
-history-db flag (see below). The change takes effect
immediately — no restart required.
The database file is created automatically if it does not exist. This is important for RAM disk setups where the file disappears on every reboot.
The position log is disabled by default. If your system runs from an SD card (common on Raspberry Pi), do not enable it with the default path. See the section below for safe setup instructions.
Raspberry Pi & SD Card Considerations
SD cards have a limited number of write cycles. The position log writes to SQLite every time a new station packet is decoded — typically a few times per minute on a 1200 baud channel, but potentially more on busy frequencies or when connected to APRS-IS. Over weeks and months, this can shorten the life of an SD card.
Use a RAM disk
The simplest solution is to store the history database on a
tmpfs (RAM disk). On systemd-based systems
(including Raspberry Pi OS) /run is always a tmpfs,
and systemd can manage a per-service subdirectory for you with
correct ownership and lifecycle. Point graywolf at
/run/graywolf/history.db.
Note that the packaged systemd unit has PrivateTmp=yes,
which gives the service a namespaced /tmp that is
wiped on every service restart. For that reason
/tmp is not a good choice for the
history database — use /run/graywolf/ instead.
Configure the database path
The path is passed to graywolf via the -history-db
command-line flag. When running under systemd, add a drop-in:
sudo systemctl edit graywolf
This opens an override file. Add:
[Service]
ExecStart=
ExecStart=/usr/bin/graywolf -config /var/lib/graywolf/graywolf.db -history-db /run/graywolf/history.db -tile-cache-dir /var/lib/graywolf/tiles -modem /usr/bin/graywolf-modem -http 0.0.0.0:8080
RuntimeDirectory=graywolf
RuntimeDirectoryMode=0755
RuntimeDirectoryPreserve=yes
RuntimeDirectory=graywolf creates
/run/graywolf/ owned by the graywolf user.
RuntimeDirectoryPreserve=yes keeps its contents across
systemctl restart so the database survives service
restarts (it is still cleared on reboot — see below).
The empty ExecStart= line is required to clear the
inherited ExecStart before replacing it.
Then reload and restart:
sudo systemctl daemon-reload
sudo systemctl restart graywolf
What happens on reboot?
With a RAM disk, the history database is lost on every reboot. This is expected and harmless — graywolf recreates the database automatically on startup. The map simply starts empty and fills in as stations are heard. On an active frequency the map is typically well-populated within a few minutes.