small fixes
This commit is contained in:
+260
@@ -0,0 +1,260 @@
|
||||
# Cron Job Setup for JobifyGarden
|
||||
|
||||
Since your hosting provider doesn't have Supervisor, you'll use cron jobs to handle scheduled tasks and queue processing.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. SSH access to your server
|
||||
2. Access to crontab configuration
|
||||
3. Verify your application path (likely `/home/jobifyg/public_html` or similar)
|
||||
|
||||
## Setup Instructions
|
||||
|
||||
### Step 1: Make Queue Worker Script Executable
|
||||
|
||||
```bash
|
||||
cd /home/jobifyg/public_html
|
||||
chmod +x queue-worker.sh
|
||||
```
|
||||
|
||||
### Step 2: Configure Crontab
|
||||
|
||||
Edit your crontab:
|
||||
```bash
|
||||
crontab -e
|
||||
```
|
||||
|
||||
Add these lines (replace `/home/jobifyg/public_html` with your actual path):
|
||||
|
||||
```bash
|
||||
# =============================================================================
|
||||
# JobifyGarden Cron Jobs
|
||||
# =============================================================================
|
||||
|
||||
# Laravel Scheduler - REQUIRED
|
||||
# Runs every minute to process scheduled commands
|
||||
* * * * * cd /home/jobifyg/public_html && php artisan schedule:run >> /dev/null 2>&1
|
||||
|
||||
# Queue Worker - REQUIRED
|
||||
# Option 1: Using the helper script (recommended)
|
||||
* * * * * /home/jobifyg/public_html/queue-worker.sh
|
||||
|
||||
# Queue Worker - Option 2: Direct command (if script doesn't work)
|
||||
# * * * * * cd /home/jobifyg/public_html && php artisan queue:work --max-time=50 --stop-when-empty --sleep=3 --tries=3 >> storage/logs/queue.log 2>&1
|
||||
|
||||
# Queue Restart - OPTIONAL but RECOMMENDED
|
||||
# Restarts queue workers every hour to prevent memory leaks
|
||||
0 * * * * cd /home/jobifyg/public_html && php artisan queue:restart >> /dev/null 2>&1
|
||||
|
||||
# Clear old failed jobs - OPTIONAL
|
||||
# Clears failed jobs older than 7 days, runs daily at 4 AM
|
||||
0 4 * * * cd /home/jobifyg/public_html && php artisan queue:flush >> /dev/null 2>&1
|
||||
```
|
||||
|
||||
### Step 3: Verify Cron Jobs Are Running
|
||||
|
||||
After saving your crontab, verify it's active:
|
||||
|
||||
```bash
|
||||
# List your cron jobs
|
||||
crontab -l
|
||||
|
||||
# Check if cron jobs are running (wait a few minutes)
|
||||
tail -f /home/jobifyg/public_html/storage/logs/laravel.log
|
||||
|
||||
# Check queue worker logs
|
||||
tail -f /home/jobifyg/public_html/storage/logs/queue-worker.log
|
||||
```
|
||||
|
||||
## What Each Cron Job Does
|
||||
|
||||
### 1. Laravel Scheduler (`* * * * * ... schedule:run`)
|
||||
**Frequency:** Every minute
|
||||
**Purpose:** Checks and runs scheduled tasks defined in `bootstrap/app.php`
|
||||
|
||||
**Scheduled Tasks:**
|
||||
- `jobs:fetch` - Fetches new jobs from APIs every 2 hours
|
||||
- `jobs:enrich` - Auto-categorizes and enhances jobs every 6 hours
|
||||
- `jobs:clean` - Removes old jobs (45+ days) daily at 2 AM
|
||||
- `jobs:deduplicate` - Removes duplicate jobs daily at 3 AM
|
||||
- `cache:prune-stale-tags` - Cleans cache hourly
|
||||
|
||||
For detailed explanations and customization options, see [SCHEDULED_TASKS.md](SCHEDULED_TASKS.md)
|
||||
|
||||
### 2. Queue Worker (`* * * * * ... queue:work`)
|
||||
**Frequency:** Every minute
|
||||
**Purpose:** Processes background jobs from the queue
|
||||
|
||||
**Jobs Processed:**
|
||||
- Fetching jobs from external APIs
|
||||
- Processing individual job listings
|
||||
- Email notifications (if configured)
|
||||
- Cache warming
|
||||
- Other background tasks
|
||||
|
||||
**Options Explained:**
|
||||
- `--max-time=50` - Worker runs for max 50 seconds then exits
|
||||
- `--stop-when-empty` - Exits if no jobs are in queue
|
||||
- `--sleep=3` - Waits 3 seconds between jobs
|
||||
- `--tries=3` - Retries failed jobs up to 3 times
|
||||
|
||||
### 3. Queue Restart (`0 * * * * ... queue:restart`)
|
||||
**Frequency:** Every hour
|
||||
**Purpose:** Gracefully restarts queue workers to prevent memory leaks
|
||||
|
||||
### 4. Queue Flush (`0 4 * * * ... queue:flush`)
|
||||
**Frequency:** Daily at 4 AM
|
||||
**Purpose:** Clears old failed jobs from the database
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Cron jobs not running?
|
||||
|
||||
1. **Check crontab is saved:**
|
||||
```bash
|
||||
crontab -l
|
||||
```
|
||||
|
||||
2. **Check PHP path:**
|
||||
```bash
|
||||
which php
|
||||
# Use the full path in crontab if needed: /usr/bin/php artisan ...
|
||||
```
|
||||
|
||||
3. **Check application path:**
|
||||
```bash
|
||||
pwd
|
||||
# Make sure you're using the correct path in crontab
|
||||
```
|
||||
|
||||
4. **Check file permissions:**
|
||||
```bash
|
||||
ls -la /home/jobifyg/public_html/artisan
|
||||
chmod +x /home/jobifyg/public_html/artisan
|
||||
```
|
||||
|
||||
### Jobs not being processed?
|
||||
|
||||
1. **Check queue worker logs:**
|
||||
```bash
|
||||
tail -f storage/logs/queue-worker.log
|
||||
```
|
||||
|
||||
2. **Check Laravel logs:**
|
||||
```bash
|
||||
tail -f storage/logs/laravel.log
|
||||
```
|
||||
|
||||
3. **Manually run queue worker to see errors:**
|
||||
```bash
|
||||
php artisan queue:work --verbose
|
||||
```
|
||||
|
||||
4. **Check failed jobs:**
|
||||
```bash
|
||||
php artisan queue:failed
|
||||
```
|
||||
|
||||
5. **Retry failed jobs:**
|
||||
```bash
|
||||
php artisan queue:retry all
|
||||
```
|
||||
|
||||
### Jobs are fetched but not appearing?
|
||||
|
||||
1. **Check if job fetch is scheduled:**
|
||||
```bash
|
||||
php artisan schedule:list
|
||||
```
|
||||
|
||||
2. **Manually test job fetching:**
|
||||
```bash
|
||||
php artisan jobs:fetch --limit=5
|
||||
```
|
||||
|
||||
3. **Check queue:**
|
||||
```bash
|
||||
php artisan queue:work --once --verbose
|
||||
```
|
||||
|
||||
## Performance Tuning
|
||||
|
||||
### Low Traffic Site
|
||||
If your site has low traffic, you can reduce frequency:
|
||||
|
||||
```bash
|
||||
# Run queue worker every 5 minutes instead
|
||||
*/5 * * * * cd /home/jobifyg/public_html && php artisan queue:work --max-time=240 --stop-when-empty --sleep=3 --tries=3 >> storage/logs/queue.log 2>&1
|
||||
```
|
||||
|
||||
### High Traffic Site
|
||||
If you need faster job processing:
|
||||
|
||||
```bash
|
||||
# Run multiple queue workers
|
||||
* * * * * cd /home/jobifyg/public_html && php artisan queue:work --max-time=50 --stop-when-empty --queue=high,default --sleep=1 --tries=3 >> storage/logs/queue-worker-1.log 2>&1
|
||||
* * * * * cd /home/jobifyg/public_html && php artisan queue:work --max-time=50 --stop-when-empty --queue=default --sleep=1 --tries=3 >> storage/logs/queue-worker-2.log 2>&1
|
||||
```
|
||||
|
||||
## Monitoring
|
||||
|
||||
### Check Cron Execution
|
||||
Your hosting control panel may have a cron job log. Check there for execution history.
|
||||
|
||||
### Check Application Health
|
||||
```bash
|
||||
# Visit this URL in your browser (Laravel health check)
|
||||
https://jobifygarden.com/up
|
||||
|
||||
# Check recent jobs
|
||||
php artisan tinker
|
||||
>>> \App\Models\Job::latest()->take(5)->get(['id', 'title', 'created_at']);
|
||||
```
|
||||
|
||||
### Monitor Logs
|
||||
```bash
|
||||
# Watch all logs in real-time
|
||||
tail -f storage/logs/*.log
|
||||
|
||||
# Check for errors
|
||||
grep -i error storage/logs/laravel.log | tail -20
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Queue Worker Must Keep Running**: The queue worker cron ensures jobs are processed continuously. Without it, jobs will queue but never execute.
|
||||
|
||||
2. **Schedule Must Run Every Minute**: The scheduler cron must run every minute. Laravel internally determines which scheduled tasks should run.
|
||||
|
||||
3. **Time Zone**: Make sure your server's timezone matches your Laravel app timezone (check `config/app.php`).
|
||||
|
||||
4. **Testing**: After setup, wait a few minutes and check logs to verify everything is working.
|
||||
|
||||
5. **Production**: Make sure `APP_ENV=production` and `APP_DEBUG=false` in your `.env` file.
|
||||
|
||||
## Quick Test
|
||||
|
||||
After setting up cron, test immediately:
|
||||
|
||||
```bash
|
||||
# 1. Manually run scheduler
|
||||
php artisan schedule:run
|
||||
|
||||
# 2. Queue a test job
|
||||
php artisan jobs:fetch Remotive --limit=2
|
||||
|
||||
# 3. Process the queue
|
||||
php artisan queue:work --once --verbose
|
||||
|
||||
# 4. Check if jobs were created
|
||||
php artisan tinker
|
||||
>>> \App\Models\Job::count();
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
If you encounter issues:
|
||||
1. Check the troubleshooting section above
|
||||
2. Review logs in `storage/logs/`
|
||||
3. Ensure Redis is working: `php artisan tinker` then `Cache::get('test')`
|
||||
4. Verify database connection works
|
||||
Reference in New Issue
Block a user