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

94 lines
3.1 KiB
Markdown

# External Scheduling
The built-in scheduler has been removed. Use your operating system or orchestrator to trigger runs with full control over timing, retries, and monitoring.
---
## Windows Task Scheduler
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)
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)
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
- Run `npm install` and `npm run build` after pulling updates.
- Use absolute paths in scheduler commands.
- Redirect output to a log file for easier debugging.
- Execute `npm run start` manually after configuration changes to trigger the startup validator.
---
**Next steps:** [Configuration](./config.md) · [Docker](./docker.md) · [Humanization](./humanization.md)