Installing Watch Owl on Linux
Add the StatusOwl APT or YUM repository, install watch-owl, and enroll a Linux server in under five minutes.
This guide walks through installing Watch Owl on a Linux server, enrolling it with
your organization, and confirming metrics are flowing. Installs use StatusOwl's
public package repository at packages.statusowl.net, so future versions arrive
through the system's normal apt-get upgrade or dnf upgrade cycle.
Requirements
- Linux amd64 with
systemd(Debian 11+, Ubuntu 20.04+, Mint, Pop!_OS, RHEL/Rocky/Alma 8+, Fedora, CentOS Stream, or Oracle Linux). - Root or
sudoaccess — the agent runs as a dedicatedwatch-owlsystem user. - Outbound HTTPS (443) to
nest.statusowl.net(metrics) andpackages.statusowl.net(initial install + upgrades). No inbound ports required.
Create an install token
- In the dashboard, go to System Monitor → Install and click Generate install token.
- Choose a token type:
- One-time — single host, expires in 24 hours by default.
- Reusable — for fleet rollouts. Set a max-uses count and optional expiry.
- Copy the token — it's shown once. It looks like a long opaque string starting with
wo_.
Install tokens are sensitive
Anyone with an active install token can enroll a host into your organization. Paste it directly into the machine that's being enrolled — don't post it in chat or commit it to a repo. Revoke unused tokens from the same page.
Install — one-liner (recommended)
The fastest install. The script detects your distro family, adds the StatusOwl
repository and GPG key, then installs the watch-owl package via your system's
package manager:
curl -fsSL https://packages.statusowl.net/install.sh | sudo sh
Inspect the script first if you'd like — it's published verbatim at
packages.statusowl.net/install.sh and
makes no network calls outside of packages.statusowl.net.
Install — APT (Debian, Ubuntu, Mint, Pop!_OS, elementary)
If you prefer to add the repository manually:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://packages.statusowl.net/statusowl.gpg \
| sudo tee /etc/apt/keyrings/statusowl.gpg >/dev/null
sudo chmod 0644 /etc/apt/keyrings/statusowl.gpg
echo "deb [signed-by=/etc/apt/keyrings/statusowl.gpg] https://packages.statusowl.net/apt stable main" \
| sudo tee /etc/apt/sources.list.d/statusowl.list
sudo apt-get update
sudo apt-get install -y watch-owl
Install — DNF / YUM (RHEL, Fedora, Rocky, Alma, Oracle, CentOS Stream)
sudo tee /etc/yum.repos.d/statusowl.repo >/dev/null <<'EOF'
[statusowl]
name=StatusOwl Package Repository
baseurl=https://packages.statusowl.net/yum/stable
enabled=1
gpgcheck=1
gpgkey=https://packages.statusowl.net/statusowl.gpg
EOF
sudo dnf install -y watch-owl
The package installs the watch-owl binary, a watch-owl system user, a
/etc/watch-owl/ config directory, and a watch-owl.service systemd unit. The
service is not started yet — you enroll first.
Enroll the host
Run the enroll command as the watch-owl user, passing the install token. The
agent trades the token for a long-lived host credential, writes it to
/etc/watch-owl/credentials with 0600 permissions, and exits.
sudo -u watch-owl watch-owl enroll --token wo_xxxxxxxxxxxxxxxxxxxx
Then start the service:
sudo systemctl start watch-owl
sudo systemctl enable watch-owl # start on boot
Unattended installs
For configuration management (Ansible, Terraform, cloud-init), pipe the install script and pass the token through an environment variable:
curl -fsSL https://packages.statusowl.net/install.sh | sudo sh
sudo -u watch-owl watch-owl enroll --token "$WATCH_OWL_ENROLL_TOKEN"
sudo systemctl enable --now watch-owl
A reusable install token lets you bake the same value into your fleet automation without rotating it per host.
Verify the install
# Service status
sudo systemctl status watch-owl
# Recent logs
sudo journalctl -u watch-owl -f
# Current agent info (host UUID, agent version, last metric push)
sudo -u watch-owl watch-owl status
Within 30 seconds, the host should appear in System Monitor → Hosts with a live heartbeat and a first set of CPU, memory, disk, and network charts.
Upgrades
Because watch-owl lives in your system package manager, future versions arrive
via the normal upgrade path. No re-enrollment is needed — the credential file
persists across upgrades.
# Debian / Ubuntu
sudo apt-get update && sudo apt-get install --only-upgrade watch-owl
# RHEL / Fedora / Rocky
sudo dnf upgrade watch-owl
The agent also has a built-in self-update channel for security patches between package releases — see the dashboard release notes.
Uninstall
Removing the package stops the service and cleans up the credential file. The host itself remains in the dashboard until you delete it there — this preserves historical metrics for compliance and post-incident review.
# Debian / Ubuntu
sudo apt-get remove watch-owl
# RHEL / Fedora / Rocky
sudo dnf remove watch-owl
To also remove the StatusOwl repository:
# APT
sudo rm /etc/apt/sources.list.d/statusowl.list /etc/apt/keyrings/statusowl.gpg
# DNF / YUM
sudo rm /etc/yum.repos.d/statusowl.repo
Troubleshooting
watch-owl enroll fails with "token already consumed" — One-time tokens can only
be used once. Generate a new token from the dashboard, or use a reusable token for
fleet installs.
Service starts but no host appears in dashboard — Check journalctl -u watch-owl
for connection errors. The agent must be able to reach nest.statusowl.net:443
outbound.
apt-get install fails with NO_PUBKEY — The keyring path or signed-by= flag in
/etc/apt/sources.list.d/statusowl.list is wrong. Re-run the keyring step from the
APT install section above.
Wrong organization — If you enrolled into the wrong organization by accident, delete the host in System Monitor → Hosts, then re-enroll with a token from the correct organization.