This guide explains how to set up cron jobs to automatically refresh feeds in your VibeReader Docker container.
You need two cron jobs:
- Scheduler - Queues feed refresh jobs (runs every 15 minutes)
- Worker - Processes queued jobs (runs every 5 minutes)
On your host machine (not inside Docker), open your crontab for editing:
crontab -eIf this is your first time, you may be asked to choose an editor. Choose your preferred editor (nano is usually the easiest).
Add these two lines to your crontab file:
# Schedule feed refreshes every 15 minutes (queues jobs)
*/15 * * * * PATH=/usr/local/bin:/usr/bin:/bin && docker exec vibereader php /var/www/html/scheduler.php >> /tmp/vibereader-scheduler.log 2>&1
# Process queued jobs every 5 minutes (executes the jobs)
*/5 * * * * PATH=/usr/local/bin:/usr/bin:/bin && docker exec vibereader php /var/www/html/worker.php >> /tmp/vibereader-worker.log 2>&1Important Notes:
- The
PATH=/usr/local/bin:/usr/bin:/binensures Docker is found (cron has a minimal PATH) - The
>> /tmp/vibereader-*.log 2>&1redirects output to log files for debugging - Adjust the timing (
*/15and*/5) if you want different intervals
- nano: Press
Ctrl+X, thenY, thenEnter - vim: Press
Esc, type:wq, thenEnter - Other editors: Follow their save/exit instructions
Check that your cron jobs were added:
crontab -lYou should see both lines listed.
Before waiting for cron, test that the scripts work:
# Test scheduler (should queue jobs for feeds that need refreshing)
docker exec vibereader php /var/www/html/scheduler.php
# Test worker (should process any queued jobs)
docker exec vibereader php /var/www/html/worker.phpCheck the log files to see if cron is running the jobs:
# View scheduler logs
tail -f /tmp/vibereader-scheduler.log
# View worker logs
tail -f /tmp/vibereader-worker.logYou can adjust the refresh frequency:
*/5 * * * * PATH=/usr/local/bin:/usr/bin:/bin && docker exec vibereader php /var/www/html/scheduler.php >> /tmp/vibereader-scheduler.log 2>&1
*/1 * * * * PATH=/usr/local/bin:/usr/bin:/bin && docker exec vibereader php /var/www/html/worker.php >> /tmp/vibereader-worker.log 2>&1*/30 * * * * PATH=/usr/local/bin:/usr/bin:/bin && docker exec vibereader php /var/www/html/scheduler.php >> /tmp/vibereader-scheduler.log 2>&1
*/5 * * * * PATH=/usr/local/bin:/usr/bin:/bin && docker exec vibereader php /var/www/html/worker.php >> /tmp/vibereader-worker.log 2>&1You can change how often feeds are refreshed by passing the --interval parameter to the scheduler:
# Refresh feeds that haven't been updated in 30 minutes
*/15 * * * * PATH=/usr/local/bin:/usr/bin:/bin && docker exec vibereader php /var/www/html/scheduler.php --interval=30 >> /tmp/vibereader-scheduler.log 2>&1-
Check cron service is running:
# macOS sudo launchctl list | grep cron # Linux sudo systemctl status cron
-
Check cron logs:
# macOS grep CRON /var/log/system.log # Linux grep CRON /var/log/syslog
-
Verify Docker is accessible:
which docker docker exec vibereader php --version
-
Check container name:
docker ps | grep vibereaderMake sure the container name matches (should be
vibereader) -
Test scripts manually:
docker exec vibereader php /var/www/html/scheduler.php docker exec vibereader php /var/www/html/worker.php
-
Check environment variables:
docker exec vibereader env | grep JOBS
Should show
JOBS_ENABLED=1
-
Check job queue status:
docker exec vibereader php -r "require '/var/www/html/vendor/autoload.php'; \PhpRss\Database::init(); print_r(\PhpRss\Queue\JobQueue::getStats());"
-
Check for pending jobs:
docker exec -it vibereader psql -U vibereader -d vibereader -c "SELECT status, COUNT(*) FROM jobs GROUP BY status;"
To remove the cron jobs:
crontab -eThen delete the two lines you added and save.
Or remove all cron jobs:
crontab -rAfter setting up these cron jobs:
- Scheduler runs every 15 minutes and queues refresh jobs for feeds that need updating
- Worker runs every 5 minutes and processes the queued jobs
- Your feeds will automatically refresh in the background
- Manual refreshes still work immediately (they bypass the queue)