Repository navigation
v0.0.3
CronCompose v0.0.3
Reliable port discovery for systemd and pm2, plus in-app update visibility.
Highlights
- Port discovery that works on real hosts — the agent now falls back from
sstolsof, then retries with passwordlesssudowhen unprivilegedss -pomits process columns (common on Raspberry Pi and other boxes where the agent runs as an unprivileged user). systemd ownership is built fromsystemctl show(MainPID, cgroup PIDs) instead of relying only on per-socket cgroup reads. pm2 ownership includes child/worker PIDs, not just the top-leveljlistpid. - Agent installer sudoers —
scripts/install-agent.shwrites/etc/sudoers.d/croncompose-agentwith grants forssandlsofso the Ports page works out of the box on fresh agent installs. - Clearer Ports empty state — when systemd/pm2 connectors exist but no sockets are reported, the UI explains that services must be listening and socket inspection may need a sudo grant (instead of implying no connector was discovered).
- Updates panel (Settings) — check for control-plane and agent updates from the UI, see what is current vs available, and trigger agent self-updates per server when policy allows.
Upgrade notes
Control plane (source install)
cd cron-compose
git pull
./croncompose-ctl.sh restart # or rebuild if you changed Go/TS locallyNo new database migrations in this release.
Agent (binary / package install)
Reinstall or replace the agent binary, then restart the service:
# package install
sudo dpkg -i croncompose-agent_v0.0.3_<arch>.deb
sudo systemctl restart croncompose-agent
# or curl installer
curl -sSL ... AGENT_VERSION=v0.0.3 bashAgent (source / pm2 on the same host as the control plane)
cd cron-compose/agent
go build -o bin/agent ./cmd/agent
cd ..
pm2 restart croncompose-agent
# or: ./croncompose-ctl.sh restartSocket inspection sudo (existing installs)
If the Ports page stays empty after upgrading the agent, grant the user that runs the agent passwordless sudo for socket tools. The standalone installer creates a croncompose user; a source install usually runs the agent as your login user (e.g. pi):
# standalone agent user (typical package install)
sudo tee /etc/sudoers.d/croncompose-agent <<'EOF'
croncompose ALL=(root) NOPASSWD: /usr/bin/ss, /usr/sbin/ss, /usr/bin/lsof
EOF
# source install as pi (Raspberry Pi dev box)
sudo tee /etc/sudoers.d/croncompose-agent <<'EOF'
pi ALL=(root) NOPASSWD: /usr/bin/ss, /usr/bin/lsof
EOF
sudo chmod 0440 /etc/sudoers.d/croncompose-agent
sudo visudo -cTest:
sudo -n ss -H -lntp | headYou should see users:(("name",pid=...)) on listen lines.
Agent binaries (this release)
Pre-built static Linux binaries are attached to this GitHub release:
| Asset | Platform |
|---|---|
croncompose-agent-linux-amd64 |
Linux x86_64 |
croncompose-agent-linux-arm64 |
Linux ARM64 |
croncompose-agent_v0.0.3_amd64.deb |
Debian/Ubuntu amd64 |
croncompose-agent_v0.0.3_arm64.deb |
Debian/Ubuntu arm64 |
croncompose-agent_v0.0.3_amd64.apk |
Alpine amd64 |
croncompose-agent_v0.0.3_arm64.apk |
Alpine arm64 |
Install on a remote server with the enrollment token from the UI:
curl -sSL https://raw.githubusercontent.com/workvar/cron-compose/main/scripts/install-agent.sh | \
sudo TOKEN=<token> \
CONTROL_PLANE_HTTP=https://<host>/api/v1 \
CONTROL_PLANE_ADDR=<host>:9090 \
AGENT_VERSION=v0.0.3 bashOr download the binary directly from this release's assets.