FreshRSS: Feeds Not Updating — Fix
The Problem
FreshRSS is running and you can add feeds, but articles never update automatically. New posts from subscribed feeds don’t appear unless you manually click “Refresh.” Some users also see feeds stuck at “never updated” in the feed management interface.
This is the single most common FreshRSS issue, and it almost always has the same root cause.
The Cause
FreshRSS relies on a cron daemon inside the Docker container to periodically fetch new articles from your feeds. If the cron daemon isn’t running — or isn’t configured — feeds never update on their own.
The most frequent causes:
CRON_MINenvironment variable not set. The official FreshRSS Docker image disables the internal cron daemon entirely whenCRON_MINis empty or missing. No cron = no automatic updates.- Using the LinuxServer.io image without external cron. The LSIO image (
linuxserver/freshrss) doesn’t include an internal cron daemon. You must set up cron on the host system. - Feed source rate limiting. Some feeds return HTTP 429 (Too Many Requests) when polled too frequently, causing silent fetch failures.
- DNS resolution failures inside the container. The container can’t resolve feed domain names, so fetch requests fail silently.
The Fix
Method 1: Set CRON_MIN (Official Image — Most Common Fix)
Add the CRON_MIN environment variable to your Docker Compose:
services:
freshrss:
image: freshrss/freshrss:1.28.1
container_name: freshrss
ports:
- "8080:80"
volumes:
- freshrss-data:/var/www/FreshRSS/data
- freshrss-extensions:/var/www/FreshRSS/extensions
environment:
TZ: UTC
CRON_MIN: "2,32"
restart: unless-stopped
volumes:
freshrss-data:
freshrss-extensions:
CRON_MIN: "2,32" runs feed updates at minutes 2 and 32 of every hour (twice per hour). Other common values:
CRON_MIN Value | Update Frequency | Best For |
|---|---|---|
"*/15" | Every 15 minutes | News junkies, few feeds |
"3,33" | Twice per hour | Most users (recommended) |
"13" | Once per hour | Large feed collections (500+) |
"*/5" | Every 5 minutes | Time-sensitive feeds (may trigger rate limits) |
After adding the variable, restart the container:
docker compose down && docker compose up -d
Verify cron is running inside the container:
docker exec freshrss ps aux | grep cron
You should see a crond process. If not, check the container logs:
docker logs freshrss 2>&1 | grep -i cron
Method 2: Set Up External Cron (LinuxServer.io Image)
If using the LinuxServer.io image (lscr.io/linuxserver/freshrss), add a cron job on the host:
crontab -e
Add this line (runs every 30 minutes):
*/30 * * * * docker exec --user abc freshrss php /app/www/app/actualize_script.php > /dev/null 2>&1
For the official image with external cron instead of internal:
*/30 * * * * docker exec --user www-data freshrss php /var/www/FreshRSS/app/actualize_script.php > /dev/null 2>&1
Critical: Use the correct user (abc for LSIO, www-data for official). Running as root can cause permission issues on the data directory.
Method 3: Fix DNS Resolution
If feeds fail silently, DNS resolution inside the container might be broken. Test it:
docker exec freshrss nslookup feeds.example.com
If this fails, add DNS servers to your Docker Compose:
services:
freshrss:
image: freshrss/freshrss:1.28.1
dns:
- 1.1.1.1
- 8.8.8.8
# ... rest of config
Or configure Docker’s global DNS in /etc/docker/daemon.json:
{
"dns": ["1.1.1.1", "8.8.8.8"]
}
Then restart Docker:
sudo systemctl restart docker
Method 4: Handle Rate-Limited Feeds
If specific feeds return HTTP 429 errors, FreshRSS (v1.27.0+) handles 429 and 503 responses with automatic backoff. For older versions, reduce your cron frequency.
Check for rate-limited feeds:
- Go to Subscription Management in FreshRSS
- Look for feeds with error status
- Click on the feed to see the last error message
If a feed consistently returns 429, increase CRON_MIN to reduce polling frequency, or set per-feed refresh intervals in Feed Settings → Refresh rate.
Prevention
- Always set
CRON_MINwhen deploying FreshRSS with the official Docker image. Add it to your deployment checklist. - Use
"3,33"as a default — it balances freshness with politeness to feed servers. - Monitor feed health periodically in Subscription Management. Feeds with persistent errors should be investigated or removed.
- Set per-feed intervals for feeds that publish infrequently (monthly blogs don’t need hourly checks).
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments