mirror of
https://github.com/TheNetsky/Microsoft-Rewards-Script.git
synced 2026-01-17 13:33:57 +00:00
* first commit * Addition of a personalized activity manager and refactoring of the logic of activities * Adding diagnostics management, including screenshot and HTML content, as well as improvements to humanize page interactions and +. * Adding the management of newspapers and webhook settings, including filtering messages and improving the structure of the summaries sent. * Adding a post-execution auto-date functionality, including options to update via Git and Docker, as well as a new configuration interface to manage these parameters. * Adding accounts in Docker, with options to use an environmental file or online JSON data, as well as minimum validations for responsible accounts. * Improving the Microsoft Rewards script display with a new headband and better log management, including colors and improved formatting for the console. * v2 * Refactor ESLint configuration and scripts for improved TypeScript support and project structure * Addition of the detection of suspended accounts with the gesture of the improved errors and journalization of banishment reasons * Adding an integrated planner for programmed task execution, with configuration in Config.json and + * Edit * Remove texte * Updating of documentation and adding the management of humanization in the configuration and +. * Adding manual purchase method allowing users to spend points without automation, with monitoring of expenses and notifications. * Correction of documentation and improvement of configuration management for manual purchase mode, adding complete documentation and appropriate banner display. * Add comprehensive documentation for job state persistence, NTFY notifications, proxy configuration, scheduling, and auto-update features - Introduced job state persistence documentation to track progress and resume tasks. - Added NTFY push notifications integration guide for real-time alerts. - Documented proxy configuration options for enhanced privacy and network management. - Included scheduling configuration for automated script execution. - Implemented auto-update configuration to keep installations current with Git and Docker options. * Ajout d'Unt Système de Rapport d'Erreurs Communautaire pour Améliorerer le Débogage, incluant la Configuration et l'Envoi de Résumés D'Erreurs Anonyés à un webhook Discord. * Mini Edit * Mise à Jour du Readme.md pour Améliorerer la Présentation et La Claté, Ajout d'Un section sur les notifications en Temps Raine et Mise à Jour des badges pour la meille unibilité. * Documentation update * Edit README.md * Edit * Update README with legacy version link * Improvement of location data management and webhooks, adding configurations normalization * Force update for PR * Improvement of documentation and configuration options for Cron integration and Docker use * Improvement of planning documentation and adding a multi-pan-pancake in the daily execution script * Deletion of the CommunityReport functionality in accordance with the project policy * Addition of randomization of start -up schedules and surveillance time for planner executions * Refactor Docker setup to use built-in scheduler, removing cron dependencies and simplifying configuration options * Adding TOTP support for authentication, update of interfaces and configuration files to include Totp secret, and automatic generation of the Totp code when connecting. * Fix [LOGIN-NO-PROMPT] No dialogs (xX) * Reset the Totp field for email_1 in the accounts.example.json file * Reset the Totp field for email_1 in the Readme.md file * Improvement of Bing Research: Use of the 'Attacked' method for the research field, management of overlays and adding direct navigation in the event of entry failure. * Adding a complete security policy, including directives on vulnerability management, coordinated disclosure and user security advice. * Remove advanced environment variables section from README * Configuration and dockerfile update: Passage to Node 22, addition of management of the purchase method, deletion of obsolete scripts * Correction of the order of the sections in the Readme.md for better readability * Update of Readm and Security Policy: Addition of the method of purchase and clarification of security and confidentiality practices. * Improvement of the readability of the Readm and deletion of the mention of reporting of vulnerabilities in the security document. * Addition of humanization management and adaptive throttling to simulate more human behavior in bot activities. * Addition of humanization management: activation/deactivation of human gestures, configuration update and adding documentation on human mode. * Deletion of community error report functionality to respect the privacy policy * Addition of immediate banning alerts and vacation configuration in the Microsoft Rewards bot * Addition of immediate banning alerts and vacation configuration in the Microsoft Rewards bot * Added scheduling support: support for 12h and 24h formats, added options for time zone, and immediate execution on startup. * Added window size normalization and page rendering to fit typical screens, with injected CSS styles to prevent excessive zooming. * Added security incident management: detection of hidden recovery emails, automation blocking, and global alerts. Updated configuration files and interfaces to include recovery emails. Improved security incident documentation. * Refactor incident alert handling: unified alert sender * s * Added security incident management: detect recovery email inconsistencies and send unified alerts. Implemented helper methods to manage alerts and compromised modes. * Added heartbeat management for the scheduler: integrated a heartbeat file to report liveliness and adjusted the watchdog configuration to account for heartbeat updates. * Edit webook * Updated security alert management: fixed the recovery email hidden in the documentation and enabled the conclusion webhook for notifications. * Improved security alert handling: added structured sending to webhooks for better visibility and updated callback interval in compromised mode. * Edit conf * Improved dependency installation: Added the --ignore-scripts option for npm ci and npm install. Updated comments in compose.yaml for clarity. * Refactor documentation structure and enhance logging: - Moved documentation files from 'information' to 'docs' directory for better organization. - Added live logging configuration to support webhook logs with email redaction. - Updated file paths in configuration and loading functions to accommodate new structure. - Adjusted scheduler behavior to prevent immediate runs unless explicitly set. - Improved error handling for account and config file loading. - Enhanced security incident documentation with detailed recovery steps. * Fix docs * Remove outdated documentation on NTFY, Proxy, Scheduling, Security, and Auto-Update configurations; update Browser class to prioritize headless mode based on environment variable. * Addition of documentation for account management and Totp, Docker Guide, and Update of the Documentation Index. * Updating Docker documentation: simplification of instructions and adding links to detailed guides. Revision of configuration options and troubleshooting sections. * Edit * Edit docs * Enhance documentation for Scheduler, Security, and Auto-Update features - Revamped the Scheduler documentation to include detailed features, configuration options, and usage examples. - Expanded the Security guide with comprehensive incident response strategies, privacy measures, and monitoring practices. - Updated the Auto-Update section to clarify configuration, methods, and best practices for maintaining system integrity. * Improved error handling and added crash recovery in the Microsoft Rewards bot. Added configuration for automatic restart and handling of local search queries when trends fail. * Fixed initial point counting in MicrosoftRewardsBot and improved error handling when sending summaries to webhooks. * Added unified support for notifications and improved handling of webhook configurations in the normalizeConfig and log functions. * UPDATE LOGIN * EDIT LOGIN * Improved login error handling: added recovery mismatch detection and the ability to switch to password authentication. * Added a full reference to configuration in the documentation and improved log and error handling in the code. * Added context management for conclusion webhooks and improved user configuration for notifications. * Mini edit * Improved logic for extracting masked emails for more accurate matching during account recovery.
648 lines
16 KiB
Markdown
648 lines
16 KiB
Markdown
# ⏰ Scheduler & Automation
|
||
|
||
<div align="center">
|
||
|
||
**🚀 Built-in scheduler for automated daily execution**
|
||
*Set it and forget it*
|
||
|
||
</div>
|
||
|
||
---
|
||
|
||
## 🎯 What is the Scheduler?
|
||
|
||
The built-in scheduler provides **automated script execution** at specified times without requiring external cron jobs or task schedulers.
|
||
|
||
### **Key Features**
|
||
- 📅 **Daily automation** — Run at the same time every day
|
||
- 🌍 **Timezone aware** — Handles DST automatically
|
||
- 🔄 **Multiple passes** — Execute script multiple times per run
|
||
- 🏖️ **Vacation mode** — Skip random days monthly
|
||
- 🎲 **Jitter support** — Randomize execution times
|
||
- ⚡ **Immediate start** — Option to run on startup
|
||
|
||
---
|
||
|
||
## ⚙️ Configuration
|
||
|
||
### **Basic Setup**
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "09:00",
|
||
"timeZone": "America/New_York",
|
||
"runImmediatelyOnStart": true
|
||
},
|
||
"passesPerRun": 2
|
||
}
|
||
```
|
||
|
||
### **Advanced Setup with Vacation Mode**
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "10:00",
|
||
"timeZone": "Europe/Paris",
|
||
"runImmediatelyOnStart": false
|
||
},
|
||
"passesPerRun": 3,
|
||
"vacation": {
|
||
"enabled": true,
|
||
"minDays": 3,
|
||
"maxDays": 5
|
||
}
|
||
}
|
||
```
|
||
|
||
### **Configuration Options**
|
||
|
||
| Setting | Default | Description |
|
||
|---------|---------|-------------|
|
||
| `enabled` | `false` | Enable built-in scheduler |
|
||
| `time` | `"09:00"` | Daily execution time (24-hour format) |
|
||
| `timeZone` | `"UTC"` | IANA timezone identifier |
|
||
| `runImmediatelyOnStart` | `true` | Execute once on process startup |
|
||
| `passesPerRun` | `1` | Number of complete runs per execution |
|
||
| `vacation.enabled` | `false` | Skip random monthly off-block |
|
||
| `vacation.minDays` | `3` | Minimum vacation days |
|
||
| `vacation.maxDays` | `5` | Maximum vacation days |
|
||
|
||
---
|
||
|
||
## 🚀 How It Works
|
||
|
||
### **Daily Scheduling**
|
||
1. **Calculate next run** — Timezone-aware scheduling
|
||
2. **Wait until time** — Minimal resource usage
|
||
3. **Execute passes** — Run script specified number of times
|
||
4. **Schedule next day** — Automatic DST adjustment
|
||
|
||
### **Startup Behavior**
|
||
|
||
#### **Immediate Start Enabled (`true`)**
|
||
- **Before scheduled time** → Run immediately + wait for next scheduled time
|
||
- **After scheduled time** → Run immediately + wait for tomorrow's time
|
||
|
||
#### **Immediate Start Disabled (`false`)**
|
||
- **Any time** → Always wait for next scheduled time
|
||
|
||
### **Multiple Passes**
|
||
- Each pass processes **all accounts** through **all tasks**
|
||
- Useful for **maximum point collection**
|
||
- Higher passes = **more points** but **increased detection risk**
|
||
|
||
---
|
||
|
||
## 🏖️ Vacation Mode
|
||
|
||
### **Monthly Off-Blocks**
|
||
Vacation mode randomly selects a **contiguous block of days** each month to skip execution.
|
||
|
||
### **Configuration**
|
||
```json
|
||
{
|
||
"vacation": {
|
||
"enabled": true,
|
||
"minDays": 3,
|
||
"maxDays": 5
|
||
}
|
||
}
|
||
```
|
||
|
||
### **How It Works**
|
||
- **Random selection** — Different days each month
|
||
- **Contiguous block** — Skip consecutive days, not scattered
|
||
- **Independent** — Works with weekly random off-days
|
||
- **Logged** — Shows selected vacation period
|
||
|
||
### **Example Output**
|
||
```
|
||
[SCHEDULE] Selected vacation block this month: 2025-01-15 → 2025-01-18
|
||
[SCHEDULE] Skipping run - vacation mode (3 days remaining)
|
||
```
|
||
|
||
---
|
||
|
||
## 🌍 Supported Timezones
|
||
|
||
### **North America**
|
||
- `America/New_York` — Eastern Time
|
||
- `America/Chicago` — Central Time
|
||
- `America/Denver` — Mountain Time
|
||
- `America/Los_Angeles` — Pacific Time
|
||
- `America/Phoenix` — Arizona (no DST)
|
||
|
||
### **Europe**
|
||
- `Europe/London` — GMT/BST
|
||
- `Europe/Paris` — CET/CEST
|
||
- `Europe/Berlin` — CET/CEST
|
||
- `Europe/Rome` — CET/CEST
|
||
- `Europe/Moscow` — MSK
|
||
|
||
### **Asia Pacific**
|
||
- `Asia/Tokyo` — JST
|
||
- `Asia/Shanghai` — CST
|
||
- `Asia/Kolkata` — IST
|
||
- `Australia/Sydney` — AEST/AEDT
|
||
- `Pacific/Auckland` — NZST/NZDT
|
||
|
||
---
|
||
|
||
## 🎲 Randomization & Watchdog
|
||
|
||
### **Environment Variables**
|
||
```powershell
|
||
# Add random delay before first run (5-20 minutes)
|
||
$env:SCHEDULER_INITIAL_JITTER_MINUTES_MIN=5
|
||
$env:SCHEDULER_INITIAL_JITTER_MINUTES_MAX=20
|
||
|
||
# Add daily jitter to scheduled time (2-10 minutes)
|
||
$env:SCHEDULER_DAILY_JITTER_MINUTES_MIN=2
|
||
$env:SCHEDULER_DAILY_JITTER_MINUTES_MAX=10
|
||
|
||
# Kill stuck passes after N minutes
|
||
$env:SCHEDULER_PASS_TIMEOUT_MINUTES=180
|
||
|
||
# Run each pass in separate process (recommended)
|
||
$env:SCHEDULER_FORK_PER_PASS=true
|
||
```
|
||
|
||
### **Benefits**
|
||
- **Avoid patterns** — Prevents exact-time repetition
|
||
- **Protection** — Kills stuck processes
|
||
- **Isolation** — Process separation for stability
|
||
|
||
---
|
||
|
||
## 🖥️ Running the Scheduler
|
||
|
||
### **Development Mode**
|
||
```powershell
|
||
npm run ts-schedule
|
||
```
|
||
|
||
### **Production Mode**
|
||
```powershell
|
||
npm run build
|
||
npm run start:schedule
|
||
```
|
||
|
||
### **Background Execution**
|
||
```powershell
|
||
# Windows Background (PowerShell)
|
||
Start-Process -NoNewWindow -FilePath "npm" -ArgumentList "run", "start:schedule"
|
||
|
||
# Alternative: Windows Task Scheduler (recommended)
|
||
# Create scheduled task via GUI or schtasks command
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Usage Examples
|
||
|
||
### **Basic Daily Automation**
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "08:00",
|
||
"timeZone": "America/New_York"
|
||
}
|
||
}
|
||
```
|
||
⏰ **Perfect for morning routine** — Catch daily resets
|
||
|
||
### **Multiple Daily Passes**
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "10:00",
|
||
"timeZone": "Europe/London",
|
||
"runImmediatelyOnStart": false
|
||
},
|
||
"passesPerRun": 3
|
||
}
|
||
```
|
||
🔄 **Maximum points** with higher detection risk
|
||
|
||
### **Conservative with Vacation**
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "20:00",
|
||
"timeZone": "America/Los_Angeles"
|
||
},
|
||
"passesPerRun": 1,
|
||
"vacation": {
|
||
"enabled": true,
|
||
"minDays": 4,
|
||
"maxDays": 6
|
||
}
|
||
}
|
||
```
|
||
🏖️ **Natural patterns** with monthly breaks
|
||
|
||
---
|
||
|
||
## 🐳 Docker Integration
|
||
|
||
### **Built-in Scheduler (Recommended)**
|
||
```yaml
|
||
services:
|
||
microsoft-rewards-script:
|
||
build: .
|
||
environment:
|
||
TZ: Europe/Paris
|
||
command: ["npm", "run", "start:schedule"]
|
||
```
|
||
- Uses `passesPerRun` from config
|
||
- Single long-running process
|
||
- No external cron needed
|
||
|
||
### **External Cron (Project Default)**
|
||
```yaml
|
||
services:
|
||
microsoft-rewards-script:
|
||
build: .
|
||
environment:
|
||
CRON_SCHEDULE: "0 7,16,20 * * *"
|
||
RUN_ON_START: "true"
|
||
```
|
||
- Uses `run_daily.sh` with random delays
|
||
- Multiple cron executions
|
||
- Lockfile prevents overlaps
|
||
|
||
---
|
||
|
||
## 📋 Logging Output
|
||
|
||
### **Scheduler Initialization**
|
||
```
|
||
[SCHEDULE] Scheduler initialized for daily 09:00 America/New_York
|
||
[SCHEDULE] Next run scheduled for 2025-01-21 09:00:00 EST
|
||
```
|
||
|
||
### **Daily Execution**
|
||
```
|
||
[SCHEDULE] Starting scheduled run (pass 1 of 2)
|
||
[SCHEDULE] Completed scheduled run in 12m 34s
|
||
[SCHEDULE] Next run scheduled for 2025-01-22 09:00:00 EST
|
||
```
|
||
|
||
### **Time Calculations**
|
||
```
|
||
[SCHEDULE] Current time: 2025-01-20 15:30:00 EDT
|
||
[SCHEDULE] Target time: 2025-01-21 09:00:00 EDT
|
||
[SCHEDULE] Waiting 17h 30m until next run
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠️ Troubleshooting
|
||
|
||
| Problem | Solution |
|
||
|---------|----------|
|
||
| **Scheduler not running** | Check `enabled: true`; verify timezone format |
|
||
| **Wrong execution time** | Verify system clock; check DST effects |
|
||
| **Memory growth** | Restart process weekly; monitor logs |
|
||
| **Missed executions** | Check system sleep/hibernation; verify process |
|
||
|
||
### **Debug Commands**
|
||
```powershell
|
||
# Test timezone calculation
|
||
node -e "console.log(new Date().toLocaleString('en-US', {timeZone: 'America/New_York'}))"
|
||
|
||
# Verify config syntax
|
||
node -e "console.log(JSON.parse((Get-Content 'src/config.json' | Out-String)))"
|
||
|
||
# Check running processes
|
||
Get-Process | Where-Object {$_.ProcessName -eq "node"}
|
||
```
|
||
|
||
---
|
||
|
||
## ⚡ Performance & Best Practices
|
||
|
||
### **Optimal Timing**
|
||
- **🌅 Morning (7-10 AM)** — Catch daily resets
|
||
- **🌆 Evening (7-10 PM)** — Complete remaining tasks
|
||
- **❌ Avoid peak hours** — Reduce detection during high traffic
|
||
|
||
### **Pass Recommendations**
|
||
- **1 pass** — Safest, good for most users
|
||
- **2-3 passes** — Balance of points vs. risk
|
||
- **4+ passes** — Higher risk, development only
|
||
|
||
### **Monitoring**
|
||
- ✅ Check logs regularly for errors
|
||
- ✅ Monitor point collection trends
|
||
- ✅ Verify scheduler status weekly
|
||
|
||
---
|
||
|
||
## 🔗 Alternative Solutions
|
||
|
||
### **Windows Task Scheduler**
|
||
```powershell
|
||
# Create scheduled task
|
||
schtasks /create /tn "MS-Rewards" /tr "npm start" /sc daily /st 09:00 /sd 01/01/2025
|
||
```
|
||
|
||
### **PowerShell Scheduled Job**
|
||
```powershell
|
||
# Register scheduled job
|
||
Register-ScheduledJob -Name "MSRewards" -ScriptBlock {cd "C:\path\to\project"; npm start} -Trigger (New-JobTrigger -Daily -At 9am)
|
||
```
|
||
|
||
---
|
||
|
||
## 🔗 Related Guides
|
||
|
||
- **[Getting Started](./getting-started.md)** — Initial setup and configuration
|
||
- **[Humanization](./humanization.md)** — Natural behavior patterns
|
||
- **[Docker](./docker.md)** — Container deployment
|
||
- **[Job State](./jobstate.md)** — Execution state management
|
||
|
||
## Usage Examples
|
||
|
||
### Basic Daily Run
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "08:00",
|
||
"timeZone": "America/New_York"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Multiple Daily Passes
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "10:00",
|
||
"timeZone": "Europe/London",
|
||
"runImmediatelyOnStart": false
|
||
},
|
||
"passesPerRun": 3
|
||
}
|
||
```
|
||
|
||
### Development Testing
|
||
```json
|
||
{
|
||
"schedule": {
|
||
"enabled": true,
|
||
"time": "00:01",
|
||
"timeZone": "UTC",
|
||
"runImmediatelyOnStart": true
|
||
}
|
||
}
|
||
```
|
||
|
||
## Supported Timezones
|
||
|
||
Common IANA timezone identifiers:
|
||
|
||
### North America
|
||
- `America/New_York` (Eastern Time)
|
||
- `America/Chicago` (Central Time)
|
||
- `America/Denver` (Mountain Time)
|
||
- `America/Los_Angeles` (Pacific Time)
|
||
- `America/Phoenix` (Arizona - no DST)
|
||
|
||
### Europe
|
||
- `Europe/London` (GMT/BST)
|
||
- `Europe/Paris` (CET/CEST)
|
||
- `Europe/Berlin` (CET/CEST)
|
||
- `Europe/Rome` (CET/CEST)
|
||
- `Europe/Moscow` (MSK)
|
||
|
||
### Asia Pacific
|
||
- `Asia/Tokyo` (JST)
|
||
- `Asia/Shanghai` (CST)
|
||
- `Asia/Kolkata` (IST)
|
||
- `Australia/Sydney` (AEST/AEDT)
|
||
- `Pacific/Auckland` (NZST/NZDT)
|
||
|
||
### UTC Variants
|
||
- `UTC` (Coordinated Universal Time)
|
||
- `GMT` (Greenwich Mean Time)
|
||
|
||
## Running the Scheduler
|
||
|
||
### Development Mode
|
||
```bash
|
||
npm run ts-schedule
|
||
```
|
||
|
||
### Production Mode
|
||
```bash
|
||
npm run build
|
||
npm run start:schedule
|
||
```
|
||
|
||
### Optional Randomization and Watchdog
|
||
|
||
You can introduce slight randomness to the start times and protect against stuck runs:
|
||
|
||
- `SCHEDULER_INITIAL_JITTER_MINUTES_MIN` / `SCHEDULER_INITIAL_JITTER_MINUTES_MAX`
|
||
- Adds a one‑time random delay before the very first run after the scheduler starts.
|
||
- Example: `SCHEDULER_INITIAL_JITTER_MINUTES_MIN=5` and `SCHEDULER_INITIAL_JITTER_MINUTES_MAX=20` delays the first run by 5–20 minutes.
|
||
|
||
- `SCHEDULER_DAILY_JITTER_MINUTES_MIN` / `SCHEDULER_DAILY_JITTER_MINUTES_MAX`
|
||
- Adds an extra random delay to each daily scheduled execution.
|
||
- Example: 2–10 minutes of daily jitter to avoid exact same second each day.
|
||
|
||
- `SCHEDULER_PASS_TIMEOUT_MINUTES`
|
||
- Kills a stuck pass after N minutes (default 180). Useful if the underlying browser gets stuck.
|
||
|
||
- `SCHEDULER_FORK_PER_PASS`
|
||
- Defaults to `true`. When `true`, each pass runs in a child Node process so a stuck pass can be terminated without killing the scheduler. Set to `false` to run passes in‑process (not recommended).
|
||
|
||
### Background Execution
|
||
```bash
|
||
# Linux/macOS (background process)
|
||
nohup npm run start:schedule > schedule.log 2>&1 &
|
||
|
||
# Windows (background service - requires additional setup)
|
||
# Recommend using Task Scheduler or Windows Service wrapper
|
||
```
|
||
|
||
## Process Management
|
||
|
||
### Long-Running Process
|
||
- Scheduler runs continuously
|
||
- Automatically handles timezone changes
|
||
- Graceful handling of system clock adjustments
|
||
|
||
### Memory Management
|
||
- Minimal memory footprint between runs
|
||
- Garbage collection after each execution
|
||
- No memory leaks in long-running processes
|
||
|
||
### Error Recovery
|
||
- Failed runs don't affect future scheduling
|
||
- Automatic retry on next scheduled time
|
||
- Error logging for troubleshooting
|
||
|
||
## Logging Output
|
||
|
||
### Scheduler Events
|
||
```
|
||
[SCHEDULE] Scheduler initialized for daily 09:00 America/New_York
|
||
[SCHEDULE] Next run scheduled for 2025-09-21 09:00:00 EST
|
||
[SCHEDULE] Starting scheduled run (pass 1 of 2)
|
||
[SCHEDULE] Completed scheduled run in 12m 34s
|
||
[SCHEDULE] Next run scheduled for 2025-09-22 09:00:00 EST
|
||
```
|
||
|
||
### Time Calculations
|
||
```
|
||
[SCHEDULE] Current time: 2025-09-20 15:30:00 EDT
|
||
[SCHEDULE] Target time: 2025-09-21 09:00:00 EDT
|
||
[SCHEDULE] Waiting 17h 30m until next run
|
||
```
|
||
|
||
## Integration with Other Features
|
||
|
||
### Docker Compatibility
|
||
- Scheduler works in Docker containers
|
||
- Alternative to external cron jobs
|
||
- Timezone handling in containerized environments
|
||
|
||
### Buy Mode Exclusion
|
||
- Scheduler only runs automation mode
|
||
- Buy mode (`-buy`) ignores scheduler settings
|
||
- Manual executions bypass scheduler
|
||
|
||
### Clustering
|
||
- Scheduler runs only in single-process mode
|
||
- Clustering disabled when scheduler is active
|
||
- Use scheduler OR clustering, not both
|
||
|
||
## Best Practices
|
||
|
||
### Optimal Timing
|
||
- **Morning runs**: Catch daily resets and new activities
|
||
- **Evening runs**: Complete remaining tasks before midnight
|
||
- **Avoid peak hours**: Reduce detection risk during high traffic
|
||
|
||
### Timezone Selection
|
||
- Use your local timezone for easier monitoring
|
||
- Consider Microsoft Rewards server timezone
|
||
- Account for daylight saving time changes
|
||
|
||
### Multiple Passes
|
||
- **2-3 passes**: Good balance of points vs. detection risk
|
||
- **More passes**: Higher detection risk
|
||
- **Single pass**: Safest but may miss some points
|
||
|
||
### Monitoring
|
||
- Check logs regularly for errors
|
||
- Monitor point collection trends
|
||
- Verify scheduler is running as expected
|
||
|
||
## Troubleshooting
|
||
|
||
### Common Issues
|
||
|
||
**Scheduler not running:**
|
||
- Check `enabled: true` in config
|
||
- Verify timezone format is correct
|
||
- Ensure no syntax errors in config.json
|
||
|
||
**Wrong execution time:**
|
||
- Verify system clock is accurate
|
||
- Check timezone identifier spelling
|
||
- Consider daylight saving time effects
|
||
|
||
**Memory growth over time:**
|
||
- Restart scheduler process weekly
|
||
- Monitor system resource usage
|
||
- Check for memory leaks in logs
|
||
|
||
**Missed executions:**
|
||
- System was sleeping/hibernating
|
||
- Process was killed or crashed
|
||
- Clock was adjusted significantly
|
||
|
||
### Debug Commands
|
||
```bash
|
||
# Test timezone calculation
|
||
node -e "console.log(new Date().toLocaleString('en-US', {timeZone: 'America/New_York'}))"
|
||
|
||
# Verify config syntax
|
||
node -e "console.log(JSON.parse(require('fs').readFileSync('src/config.json')))"
|
||
|
||
# Check process status
|
||
ps aux | grep "start:schedule"
|
||
```
|
||
|
||
## Alternative Solutions
|
||
|
||
### External Cron (Linux/macOS)
|
||
```bash
|
||
# Crontab entry for 9 AM daily
|
||
0 9 * * * cd /path/to/MSN-V2 && npm start
|
||
|
||
# Multiple times per day
|
||
0 9,15,21 * * * cd /path/to/MSN-V2 && npm start
|
||
```
|
||
|
||
### Windows Task Scheduler
|
||
- Create scheduled task via Task Scheduler
|
||
- Set trigger for daily execution
|
||
- Configure action to run `npm start` in project directory
|
||
|
||
### Docker Cron
|
||
```dockerfile
|
||
# Add to Dockerfile
|
||
RUN apt-get update && apt-get install -y cron
|
||
COPY crontab /etc/cron.d/rewards-cron
|
||
RUN crontab /etc/cron.d/rewards-cron
|
||
```
|
||
|
||
### Docker + Built-in Scheduler
|
||
Au lieu d'utiliser cron, vous pouvez lancer le scheduler intégré dans le conteneur (un seul process long‑vivant) :
|
||
|
||
```yaml
|
||
services:
|
||
microsoft-rewards-script:
|
||
build: .
|
||
environment:
|
||
TZ: Europe/Paris
|
||
command: ["npm", "run", "start:schedule"]
|
||
```
|
||
|
||
Dans ce mode :
|
||
- `passesPerRun` fonctionne (exécutera plusieurs passes à chaque horaire interne défini par `src/config.json`).
|
||
- Vous n'avez plus besoin de `CRON_SCHEDULE` ni de `run_daily.sh`.
|
||
|
||
### Docker + External Cron (par défaut du projet)
|
||
Si vous préférez la planification par cron système dans le conteneur (valeur par défaut du projet) :
|
||
- Utilisez `CRON_SCHEDULE` (ex.: `0 7,16,20 * * *`).
|
||
- `run_daily.sh` introduit un délai aléatoire (par défaut 5–50 min) et un lockfile pour éviter les chevauchements.
|
||
- `RUN_ON_START=true` déclenche une exécution immédiate au démarrage du conteneur (sans délai aléatoire).
|
||
|
||
## Performance Considerations
|
||
|
||
### System Resources
|
||
- Minimal CPU usage between runs
|
||
- Low memory footprint when idle
|
||
- No network activity during waiting periods
|
||
|
||
### Startup Time
|
||
- Fast initialization (< 1 second)
|
||
- Quick timezone calculations
|
||
- Immediate scheduling of next run
|
||
|
||
### Reliability
|
||
- Robust error handling
|
||
- Automatic recovery from failures
|
||
- Consistent execution timing |