---
name: systemd-units
description: Shadow runs two ubuntu-owned systemd user units; lingering is enabled so they survive logout
metadata:
node_type: memory
type: project
originSessionId: 71d40fa2-b151-4c81-9821-f0dfeb7a0f66
---

As of 2026-05-15 the `ubuntu` user owns these systemd user units:

- `openclaw-gateway.service` — enabled, runs the OpenClaw WebSocket
gateway. See [[openclaw-runtime]] for the full story.
- `vvv-daily-report.timer` + `vvv-daily-report.service` — fires the
vvv-bots daily Discord report at 08:00 JST. The service is a
one-shot that just `ExecStart=`s
`/home/ubuntu/workspace/ai-agents/monitor/daily_bot_report.sh`.
Migrated from a `0 8 * * *` cron entry on 2026-05-15; the old cron
line is preserved as `# MIGRATED 2026-05-15 ...` in `crontab -l`.

`loginctl enable-linger ubuntu` was set so user units run even when no
shell session is open.

**Practical commands:**

```sh
systemctl --user list-units --type=service
systemctl --user list-timers
systemctl --user status openclaw-gateway
journalctl --user -u openclaw-gateway -f
journalctl --user -u vvv-daily-report.service --since "today"
```

**How to apply:** Prefer `systemctl --user` over cron for new
long-running or scheduled tasks on shadow. Drop unit files in
`~/.config/systemd/user/`. Don't forget `daemon-reload` after editing.
For root-level services, `systemctl` (no `--user`) targets the system
manager — currently used by Dify (Docker), Ollama, Tailscale, VNC,
n8n. Don't accidentally mix the two.