Files
Microsoft-Rewards-Bot/docs/schedule.md

267 lines
6.5 KiB
Markdown

# Automatic Task Scheduling
The bot can **automatically configure** your system's task scheduler when you run it for the first time. This works on:
-**Windows** → Windows Task Scheduler
-**Linux/Raspberry Pi** → cron
-**macOS** → cron
---
## Quick Setup (Recommended)
### 1. Edit your configuration
Open `src/config.jsonc` and find the `scheduling` section:
```jsonc
{
"scheduling": {
"enabled": true, // ← Change this to true
"type": "auto", // ← Leave as "auto" for automatic detection
// For Linux/Raspberry Pi/macOS:
"cron": {
"schedule": "0 9 * * *" // ← Daily at 9 AM (customize if needed)
},
// For Windows:
"taskScheduler": {
"schedule": "09:00", // ← Daily at 9:00 AM (customize if needed)
"frequency": "daily"
}
}
}
```
### 2. Run the bot once
```bash
npm run start
```
**That's it!** The bot will automatically:
- Detect your operating system
- Configure the appropriate scheduler (cron or Task Scheduler)
- Set it up to run at your specified time
- Show you a confirmation message
### 3. Verify it worked
**Linux/Raspberry Pi/macOS:**
```bash
crontab -l
```
You should see a line with `# Microsoft-Rewards-Bot`
**Windows:**
- Open Task Scheduler
- Look for "Microsoft-Rewards-Bot" in the task list
---
## Configuration Examples
### Example 1: Raspberry Pi - Run daily at 9 AM
```jsonc
{
"scheduling": {
"enabled": true,
"type": "auto",
"cron": {
"schedule": "0 9 * * *",
"logFile": "/home/pi/rewards.log" // Optional: save logs here
}
}
}
```
### Example 2: Windows - Run twice daily
```jsonc
{
"scheduling": {
"enabled": true,
"type": "auto",
"taskScheduler": {
"schedule": "09:00", // First run at 9 AM
"frequency": "daily"
}
}
}
```
For multiple times per day on Windows, you'll need to manually create additional tasks.
### Example 3: Linux - Run on weekdays only at 2:30 PM
```jsonc
{
"scheduling": {
"enabled": true,
"type": "cron",
"cron": {
"schedule": "30 14 * * 1-5" // 2:30 PM, Monday-Friday
}
}
}
```
### Cron Schedule Examples
Use [crontab.guru](https://crontab.guru) to create custom schedules:
| Schedule | Description |
|----------|-------------|
| `0 9 * * *` | Every day at 9:00 AM |
| `30 14 * * *` | Every day at 2:30 PM |
| `0 9,21 * * *` | Every day at 9:00 AM and 9:00 PM |
| `0 9 * * 1-5` | Weekdays at 9:00 AM (Monday-Friday) |
| `0 */6 * * *` | Every 6 hours |
| `0 8 * * 0` | Every Sunday at 8:00 AM |
---
## Disabling Automatic Scheduling
To remove the scheduled task:
1. Set `"enabled": false` in your config
2. Run the bot once: `npm run start`
3. The scheduler will be automatically removed
Or manually remove it:
**Linux/Raspberry Pi/macOS:**
```bash
crontab -e
# Delete the line with "# Microsoft-Rewards-Bot"
```
**Windows:**
- Open Task Scheduler
- Find "Microsoft-Rewards-Bot"
- Right-click → Delete
---
## Manual Configuration (Advanced)
If you prefer manual setup or need more control, follow these platform-specific guides:
### Windows Task Scheduler (Manual)
1. Open Task Scheduler, choose **Create Basic Task...**, and name it `Microsoft Rewards Bot`.
2. Pick a trigger (daily, weekly, at startup, etc.).
3. Choose **Start a Program** and configure:
- Program/script: `powershell.exe`
- Arguments: `-NoProfile -ExecutionPolicy Bypass -Command "cd 'C:\Users\YourUser\Microsoft-Rewards-Script'; npm run start"`
- Start in (optional): `C:\Users\YourUser\Microsoft-Rewards-Script`
4. Finish the wizard, edit the task on the **General** tab, and enable **Run whether user is logged on or not**. Grant highest privileges if required.
5. Test with **Run**. Append `| Tee-Object -FilePath C:\Logs\rewards.log` to capture output in a file.
> Tip: prefer a batch file? Create `run-rewards.bat` with `cd /d C:\Users\YourUser\Microsoft-Rewards-Script` and `npm run start`, then point Task Scheduler to that file.
---
## Linux / macOS (cron - Manual)
1. Run `npm run start` once to confirm the project completes successfully.
2. Edit the crontab: `crontab -e`.
3. Add an entry (example: 09:15 daily):
```cron
15 9 * * * cd /home/you/Microsoft-Rewards-Script && /usr/bin/env npm run start >> /home/you/rewards.log 2>&1
```
4. Save the file and verify the log after the next trigger.
Need multiple runs? Add more cron lines with different times (for example `0 9 * * *` and `30 18 * * *`).
---
## Systemd Timer (Linux alternative - Manual)
1. Create `/etc/systemd/system/rewards-bot.service`:
```ini
[Unit]
Description=Microsoft Rewards Bot
WorkingDirectory=/home/you/Microsoft-Rewards-Script
[Service]
Type=oneshot
Environment=NODE_ENV=production
ExecStart=/usr/bin/env npm run start
```
2. Create `/etc/systemd/system/rewards-bot.timer`:
```ini
[Unit]
Description=Run Microsoft Rewards Bot daily
[Timer]
OnCalendar=*-*-* 09:00:00
Persistent=true
[Install]
WantedBy=timers.target
```
3. Reload and enable:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now rewards-bot.timer
```
4. Inspect status via `systemctl status rewards-bot.timer` and recent runs with `journalctl -u rewards-bot.service`.
---
## Docker & Containers
- The container now runs a single pass. Restart it on your schedule (cron, Kubernetes CronJob, Task Scheduler, etc.).
- To schedule inside the container, set:
```yaml
USE_CRON: "true"
CRON_SCHEDULE: "0 9 * * *"
RUN_ON_START: "true"
```
The entrypoint installs cron, runs according to `CRON_SCHEDULE`, and tails `/var/log/cron.log`.
- Mount `accounts.jsonc`, `config.jsonc`, and `sessions/` so each run shares state.
---
## Troubleshooting
**"cron is not installed"** (Linux/Raspberry Pi)
```bash
sudo apt-get update
sudo apt-get install cron
```
**"Permission denied"** (Linux/Raspberry Pi)
- The bot needs write access to crontab
- Make sure you're running as the correct user
**"Access denied"** (Windows)
- Right-click PowerShell or Command Prompt
- Choose "Run as Administrator"
- Run `npm run start` again
**Task not running at scheduled time:**
1. Check your system's time and timezone
2. Verify the schedule format is correct
3. For cron: use [crontab.guru](https://crontab.guru) to validate
4. Check logs to see if there are any errors
**Manually check if scheduler is active:**
**Linux/Raspberry Pi:**
```bash
crontab -l | grep "Microsoft-Rewards"
```
**Windows:**
```powershell
schtasks /Query /TN "Microsoft-Rewards-Bot" /FO LIST
```
---
**Next steps:** [Configuration](./config.md) · [Docker](./docker.md) · [Humanization](./humanization.md)