mirror of
https://github.com/freedbygrace/PSOPNSenseAPI.git
synced 2026-07-26 11:58:18 +00:00
327 lines
12 KiB
Markdown
327 lines
12 KiB
Markdown
# Cron Job Management
|
|
|
|
This component provides cmdlets for managing cron jobs on OPNSense firewalls.
|
|
|
|
## Overview
|
|
|
|
The Cron Job Management component allows you to configure and manage scheduled tasks (cron jobs) on OPNSense firewalls. It provides cmdlets for creating, viewing, modifying, and deleting cron jobs.
|
|
|
|
## Cmdlets
|
|
|
|
### Get-OPNSenseCronJob
|
|
|
|
Retrieves cron jobs from an OPNSense firewall.
|
|
|
|
#### Parameters
|
|
|
|
- **Uuid** - The UUID of a specific cron job to retrieve. If not specified, all cron jobs are returned.
|
|
- **Description** - Filter cron jobs by description.
|
|
- **Command** - Filter cron jobs by command.
|
|
|
|
#### Examples
|
|
|
|
```powershell
|
|
# Get all cron jobs
|
|
Get-OPNSenseCronJob
|
|
|
|
# Get a specific cron job by UUID
|
|
Get-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
|
|
|
|
# Get cron jobs with a specific description
|
|
Get-OPNSenseCronJob -Description "Backup"
|
|
|
|
# Get cron jobs with a specific command
|
|
Get-OPNSenseCronJob -Command "configctl"
|
|
```
|
|
|
|
### New-OPNSenseCronJob
|
|
|
|
Creates a new cron job on an OPNSense firewall.
|
|
|
|
#### Parameters
|
|
|
|
- **Description** - A description for the cron job.
|
|
- **Command** - The command to execute.
|
|
- **Parameters** - The parameters for the command.
|
|
- **Minute** - The minute(s) when the job should run (0-59, *, */5, etc.).
|
|
- **Hour** - The hour(s) when the job should run (0-23, *, */2, etc.).
|
|
- **Day** - The day(s) of the month when the job should run (1-31, *, */2, etc.).
|
|
- **Month** - The month(s) when the job should run (1-12, *, */2, etc.).
|
|
- **Weekday** - The weekday(s) when the job should run (0-7, *, etc., where 0 and 7 are Sunday).
|
|
- **Enabled** - Whether the cron job is enabled. Default is true.
|
|
- **Force** - Suppresses the confirmation prompt.
|
|
|
|
#### Examples
|
|
|
|
```powershell
|
|
# Create a daily backup cron job
|
|
New-OPNSenseCronJob -Description "Daily Backup" -Command "configctl" -Parameters "system backup" -Minute "0" -Hour "2" -Day "*" -Month "*" -Weekday "*"
|
|
|
|
# Create a weekly update cron job
|
|
New-OPNSenseCronJob -Description "Weekly Update" -Command "configctl" -Parameters "firmware update" -Minute "0" -Hour "3" -Day "*" -Month "*" -Weekday "0"
|
|
|
|
# Create a monthly log rotation cron job
|
|
New-OPNSenseCronJob -Description "Monthly Log Rotation" -Command "configctl" -Parameters "system rotate" -Minute "0" -Hour "4" -Day "1" -Month "*" -Weekday "*"
|
|
|
|
# Create a disabled cron job
|
|
New-OPNSenseCronJob -Description "Temporary Job" -Command "configctl" -Parameters "system reboot" -Minute "0" -Hour "5" -Day "*" -Month "*" -Weekday "*" -Enabled:$false
|
|
```
|
|
|
|
### Set-OPNSenseCronJob
|
|
|
|
Updates an existing cron job on an OPNSense firewall.
|
|
|
|
#### Parameters
|
|
|
|
- **Uuid** - The UUID of the cron job to update.
|
|
- **Description** - A description for the cron job.
|
|
- **Command** - The command to execute.
|
|
- **Parameters** - The parameters for the command.
|
|
- **Minute** - The minute(s) when the job should run (0-59, *, */5, etc.).
|
|
- **Hour** - The hour(s) when the job should run (0-23, *, */2, etc.).
|
|
- **Day** - The day(s) of the month when the job should run (1-31, *, */2, etc.).
|
|
- **Month** - The month(s) when the job should run (1-12, *, */2, etc.).
|
|
- **Weekday** - The weekday(s) when the job should run (0-7, *, etc., where 0 and 7 are Sunday).
|
|
- **Enabled** - Whether the cron job is enabled.
|
|
- **Force** - Suppresses the confirmation prompt.
|
|
- **PassThru** - Returns the updated cron job.
|
|
|
|
#### Examples
|
|
|
|
```powershell
|
|
# Update a cron job's description
|
|
Set-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Description "Updated Backup Job"
|
|
|
|
# Update a cron job's schedule
|
|
Set-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Minute "30" -Hour "3"
|
|
|
|
# Update a cron job's command and parameters
|
|
Set-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Command "configctl" -Parameters "system backup full"
|
|
|
|
# Disable a cron job
|
|
Set-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Enabled:$false
|
|
|
|
# Update multiple properties of a cron job
|
|
Set-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Description "Full Backup" -Command "configctl" -Parameters "system backup full" -Minute "0" -Hour "1" -PassThru
|
|
```
|
|
|
|
### Remove-OPNSenseCronJob
|
|
|
|
Removes a cron job from an OPNSense firewall.
|
|
|
|
#### Parameters
|
|
|
|
- **Uuid** - The UUID of the cron job to remove.
|
|
- **Force** - Suppresses the confirmation prompt.
|
|
|
|
#### Examples
|
|
|
|
```powershell
|
|
# Remove a cron job
|
|
Remove-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
|
|
|
|
# Remove a cron job without confirmation
|
|
Remove-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -Force
|
|
```
|
|
|
|
### Enable-OPNSenseCronJob
|
|
|
|
Enables a cron job on an OPNSense firewall.
|
|
|
|
#### Parameters
|
|
|
|
- **Uuid** - The UUID of the cron job to enable.
|
|
- **Force** - Suppresses the confirmation prompt.
|
|
- **PassThru** - Returns the updated cron job.
|
|
|
|
#### Examples
|
|
|
|
```powershell
|
|
# Enable a cron job
|
|
Enable-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
|
|
|
|
# Enable a cron job and return the updated job
|
|
Enable-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -PassThru
|
|
```
|
|
|
|
### Disable-OPNSenseCronJob
|
|
|
|
Disables a cron job on an OPNSense firewall.
|
|
|
|
#### Parameters
|
|
|
|
- **Uuid** - The UUID of the cron job to disable.
|
|
- **Force** - Suppresses the confirmation prompt.
|
|
- **PassThru** - Returns the updated cron job.
|
|
|
|
#### Examples
|
|
|
|
```powershell
|
|
# Disable a cron job
|
|
Disable-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6"
|
|
|
|
# Disable a cron job and return the updated job
|
|
Disable-OPNSenseCronJob -Uuid "a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" -PassThru
|
|
```
|
|
|
|
### Apply-OPNSenseCronJobChanges
|
|
|
|
Applies pending cron job changes on an OPNSense firewall.
|
|
|
|
#### Parameters
|
|
|
|
- **Force** - Suppresses the confirmation prompt.
|
|
|
|
#### Examples
|
|
|
|
```powershell
|
|
# Apply cron job changes
|
|
Apply-OPNSenseCronJobChanges
|
|
|
|
# Apply cron job changes without confirmation
|
|
Apply-OPNSenseCronJobChanges -Force
|
|
```
|
|
|
|
## Common Scenarios
|
|
|
|
### Basic Backup Schedule
|
|
|
|
```powershell
|
|
# Connect to the OPNSense firewall
|
|
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
|
|
|
|
# Create a daily backup cron job
|
|
New-OPNSenseCronJob -Description "Daily Configuration Backup" -Command "configctl" -Parameters "system backup" -Minute "0" -Hour "2" -Day "*" -Month "*" -Weekday "*" -Force
|
|
|
|
# Apply the changes
|
|
Apply-OPNSenseCronJobChanges -Force
|
|
|
|
# Disconnect from the firewall
|
|
Disconnect-OPNSense
|
|
```
|
|
|
|
### Comprehensive Maintenance Schedule
|
|
|
|
```powershell
|
|
# Connect to the OPNSense firewall
|
|
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
|
|
|
|
# Define maintenance jobs
|
|
$cronJobs = @(
|
|
@{ Description = "Daily Backup"; Command = "configctl"; Parameters = "system backup"; Minute = "0"; Hour = "2"; Day = "*"; Month = "*"; Weekday = "*" },
|
|
@{ Description = "Weekly Full Backup"; Command = "configctl"; Parameters = "system backup full"; Minute = "0"; Hour = "3"; Day = "*"; Month = "*"; Weekday = "0" },
|
|
@{ Description = "Daily Log Rotation"; Command = "configctl"; Parameters = "system rotate"; Minute = "30"; Hour = "2"; Day = "*"; Month = "*"; Weekday = "*" },
|
|
@{ Description = "Weekly Update Check"; Command = "configctl"; Parameters = "firmware check"; Minute = "0"; Hour = "4"; Day = "*"; Month = "*"; Weekday = "1" },
|
|
@{ Description = "Monthly Cleanup"; Command = "configctl"; Parameters = "system cleanup"; Minute = "0"; Hour = "5"; Day = "1"; Month = "*"; Weekday = "*" }
|
|
)
|
|
|
|
# Create cron jobs
|
|
foreach ($job in $cronJobs) {
|
|
New-OPNSenseCronJob -Description $job.Description -Command $job.Command -Parameters $job.Parameters -Minute $job.Minute -Hour $job.Hour -Day $job.Day -Month $job.Month -Weekday $job.Weekday -Force
|
|
}
|
|
|
|
# Apply the changes
|
|
Apply-OPNSenseCronJobChanges -Force
|
|
|
|
# Disconnect from the firewall
|
|
Disconnect-OPNSense
|
|
```
|
|
|
|
### Managing Existing Cron Jobs
|
|
|
|
```powershell
|
|
# Connect to the OPNSense firewall
|
|
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
|
|
|
|
# Get all cron jobs
|
|
$cronJobs = Get-OPNSenseCronJob
|
|
|
|
# Update backup jobs to run at a different time
|
|
$backupJobs = $cronJobs | Where-Object { $_.Description -like "*Backup*" }
|
|
foreach ($job in $backupJobs) {
|
|
Set-OPNSenseCronJob -Uuid $job.Uuid -Hour "4" -Force
|
|
Write-Output "Updated job: $($job.Description) to run at 4:00 AM"
|
|
}
|
|
|
|
# Disable temporary jobs
|
|
$tempJobs = $cronJobs | Where-Object { $_.Description -like "*Temporary*" }
|
|
foreach ($job in $tempJobs) {
|
|
Disable-OPNSenseCronJob -Uuid $job.Uuid -Force
|
|
Write-Output "Disabled job: $($job.Description)"
|
|
}
|
|
|
|
# Remove obsolete jobs
|
|
$obsoleteJobs = $cronJobs | Where-Object { $_.Description -like "*Obsolete*" }
|
|
foreach ($job in $obsoleteJobs) {
|
|
Remove-OPNSenseCronJob -Uuid $job.Uuid -Force
|
|
Write-Output "Removed job: $($job.Description)"
|
|
}
|
|
|
|
# Apply the changes
|
|
Apply-OPNSenseCronJobChanges -Force
|
|
|
|
# Disconnect from the firewall
|
|
Disconnect-OPNSense
|
|
```
|
|
|
|
### Scheduling Network Tests
|
|
|
|
```powershell
|
|
# Connect to the OPNSense firewall
|
|
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
|
|
|
|
# Define network test jobs
|
|
$testJobs = @(
|
|
@{ Description = "Hourly Gateway Ping"; Command = "configctl"; Parameters = "gateway pingall"; Minute = "0"; Hour = "*"; Day = "*"; Month = "*"; Weekday = "*" },
|
|
@{ Description = "Daily DNS Test"; Command = "configctl"; Parameters = "system dns test"; Minute = "15"; Hour = "*/6"; Day = "*"; Month = "*"; Weekday = "*" },
|
|
@{ Description = "Weekly Network Diagnostics"; Command = "configctl"; Parameters = "system diagnostics"; Minute = "30"; Hour = "5"; Day = "*"; Month = "*"; Weekday = "0" }
|
|
)
|
|
|
|
# Create cron jobs
|
|
foreach ($job in $testJobs) {
|
|
New-OPNSenseCronJob -Description $job.Description -Command $job.Command -Parameters $job.Parameters -Minute $job.Minute -Hour $job.Hour -Day $job.Day -Month $job.Month -Weekday $job.Weekday -Force
|
|
}
|
|
|
|
# Apply the changes
|
|
Apply-OPNSenseCronJobChanges -Force
|
|
|
|
# Disconnect from the firewall
|
|
Disconnect-OPNSense
|
|
```
|
|
|
|
### Scheduling Firewall Reboots
|
|
|
|
```powershell
|
|
# Connect to the OPNSense firewall
|
|
Connect-OPNSense -Server "https://firewall.example.com" -ApiKey "your_api_key" -ApiSecret "your_api_secret" -SkipCertificateCheck
|
|
|
|
# Create a monthly reboot cron job
|
|
New-OPNSenseCronJob -Description "Monthly Maintenance Reboot" -Command "configctl" -Parameters "system reboot" -Minute "0" -Hour "3" -Day "15" -Month "*" -Weekday "*" -Force
|
|
|
|
# Apply the changes
|
|
Apply-OPNSenseCronJobChanges -Force
|
|
|
|
# Disconnect from the firewall
|
|
Disconnect-OPNSense
|
|
```
|
|
|
|
## Notes
|
|
|
|
- Cron job changes are not applied until you call `Apply-OPNSenseCronJobChanges`.
|
|
- The cron job schedule uses the standard cron format:
|
|
- **Minute**: 0-59, *, */5 (every 5 minutes), etc.
|
|
- **Hour**: 0-23, *, */2 (every 2 hours), etc.
|
|
- **Day**: 1-31, *, */2 (every 2 days), etc.
|
|
- **Month**: 1-12, *, */2 (every 2 months), etc.
|
|
- **Weekday**: 0-7, * (where 0 and 7 are Sunday), etc.
|
|
- The `*` character means "every" (e.g., every minute, every hour, etc.).
|
|
- The `*/n` format means "every n" (e.g., every 5 minutes, every 2 hours, etc.).
|
|
- Multiple values can be specified with commas (e.g., "1,3,5" for 1st, 3rd, and 5th).
|
|
- Ranges can be specified with hyphens (e.g., "1-5" for 1st through 5th).
|
|
- The `Command` parameter typically uses `configctl` for OPNSense system commands.
|
|
- Consider using the `-PassThru` parameter when updating cron jobs to verify the changes.
|
|
- Cron job descriptions should be descriptive and follow a consistent naming convention.
|
|
- Be careful when scheduling system reboots, as they will interrupt all services.
|
|
- Cron jobs run with system privileges, so they can execute any command available to the system.
|
|
- For complex schedules, consider using multiple cron jobs instead of a single job with a complex schedule.
|