Download the PHP package soderlind/dss-cron without Composer
On this page you can find all versions of the php package soderlind/dss-cron. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download soderlind/dss-cron
More information about soderlind/dss-cron
Files in soderlind/dss-cron
Package dss-cron
Short Description Run wp-cron on all public sites in a multisite network
License GPL-2.0-or-later
Homepage https://github.com/soderlind/all-sites-cron
Informations about the package dss-cron
All Sites Cron
Run wp-cron on all public sites in a multisite network (REST API based).
"You could have done this with a simple cron job. Why use this plugin?"
I have a cluster of WordPress sites. I did run a shell script calling wp cli, but the race condition was a problem. I needed a way to run wp-cron on all sites without overlapping. This plugin was created to solve that problem.
🚀 Quick Start
- Download
all-sites-cron.zip - Upload via
Network > Plugins > Add New > Upload Plugin - Network Activate the plugin.
- Disable WordPress default cron in
wp-config.php:
Also available via Composer:
Updates
- Plugin updates are handled automatically via GitHub. No need to manually download and install updates.
🏗 Architecture (v2.0.0)
The plugin is organised as a thin orchestrator (all-sites-cron.php) backed by five focused classes under src/:
| Class | Responsibility |
|---|---|
Lock |
Atomic execution lock (wp_cache_add / INSERT IGNORE) |
Redis_Queue |
Redis job queue with connection lifecycle and retry tracking |
Cron_Runner |
Batched get_sites() iteration and fire-and-forget wp_remote_post |
Auth |
Optional shared-secret authentication (Bearer header / ?token=) |
Response |
REST response builders and connection-close helpers |
All classes live in the Soderlind\Multisite\AllSitesCron namespace and are autoloaded via Composer PSR-4.
đź”§ Configuration
The plugin exposes a REST API route that triggers cron across your network.
JSON usage:
GitHub Actions plain text (add ?ga=1):
Deferred mode (add ?defer=1 - responds immediately, processes in background):
🚀 Redis Queue Support: If Redis is available, deferred mode automatically uses Redis for job queuing (more reliable and scalable). See Quick Start.
Combine parameters (GitHub Actions + Deferred):
Adding ?ga=1 outputs results in GitHub Actions compatible format:
- Success:
::notice::Running wp-cron on X sites - Error:
::error::Error message
Example GitHub Action success notice
⏰ Trigger Options
-
(Preferred) Use a service like cron-job.org, pingdom.com, or easycron.com to call the endpoint every 5 minutes.
-
System Crontab (every 5 minutes):
- GitHub Actions every 5 minutes. (5 minutes is the shortest interval in GitHub Actions):
Note: Using defer=1 is recommended for GitHub Actions to prevent timeout errors on large networks.
đź”’ Authentication (Optional)
By default the REST endpoints are public (backward-compatible). To require a shared-secret token:
-
Define the token in
wp-config.php:Or store it as a site option:
update_site_option( 'all_sites_cron_auth_token', 'your-secret' ); - Pass the token with requests:
When no token is configured the endpoints remain open.
Customization
Filters
Below is a complete list of filters provided by the plugin (including Redis + legacy aliases) that let you tune execution, performance, and infrastructure behavior.
| Filter | Type | Default | Purpose | Since |
|---|---|---|---|---|
all_sites_cron_rate_limit_seconds |
int | 60 |
Cooldown between runs (rate limiting) | 1.2.0 |
all_sites_cron_number_of_sites |
int | 1000 |
Max sites processed in one invocation | 1.0.7 (renamed 1.3.0) |
all_sites_cron_batch_size |
int | 50 |
Sites processed per batch (memory control) | 1.3.0 |
all_sites_cron_request_timeout |
float | 0.01 |
HTTP timeout per site cron dispatch (non-blocking) | 1.0.6 (renamed 1.3.0) |
all_sites_cron_use_redis_queue |
bool | is_redis_available() |
Whether deferred mode should use Redis queuing | 1.5.0 |
all_sites_cron_redis_host |
string | 127.0.0.1 |
Redis host for queue operations | 1.5.0 |
all_sites_cron_redis_port |
int | 6379 |
Redis port | 1.5.0 |
all_sites_cron_redis_db |
int | 0 |
Redis database index | 1.5.0 |
all_sites_cron_redis_queue_key |
string | all_sites_cron:jobs |
Redis key (list) that stores queued jobs | 1.5.0 |
https_local_ssl_verify |
bool | false (contextual) |
Core WP: SSL verification for local HTTP | (core) |
Notes:
https_local_ssl_verifyis a WordPress core filter, not defined by this plugin; we simply honor it when dispatching non‑blocking HTTP requests. See core docs for broader usage.- Legacy
dss_cron_*filters are still applied first internally (for backward compatibility) via theget_filter()helper, then the newerall_sites_cron_*version. Migrate to the new names; legacy ones will be removed in a future major release.
Examples
Rate limiting:
Limit total sites:
Batch size:
Request timeout:
all_sites_cron_require_auth
Control whether authentication is required for REST endpoints.
- Type:
bool - Default:
truewhen a token is configured,falseotherwise - New in: v2.0.0
https_local_ssl_verify
Redis connection:
Custom queue key:
Enable SSL verification (core filter):
Filter Usage Examples
Large Network Configuration (1000+ sites):
Small Network Configuration (< 100 sites):
Development/Testing Configuration:
Legacy Filters (Deprecated)
Legacy aliases still applied (old → new):
| Legacy | Current | Notes |
|---|---|---|
dss_cron_rate_limit_seconds |
all_sites_cron_rate_limit_seconds |
Cooldown between runs |
dss_cron_number_of_sites |
all_sites_cron_number_of_sites |
Total sites cap |
dss_cron_request_timeout |
all_sites_cron_request_timeout |
Per-site HTTP timeout |
dss_cron_sites_transient |
(removed) | Removed in 1.3.0 (batch processing made it obsolete) |
Migration tip:
Using the Incoming Filter Parameter
All filter callbacks receive the current value as the first parameter. You can modify relative to the incoming value instead of hard‑coding:
Interpreting Rate Limiting
If called again before the cooldown finishes the API returns HTTP 429 with JSON:
Headers include: Retry-After: <seconds>.
Benefits of REST mode
- No rewrite rules to flush: activation is simpler and avoids edge cases with 404s or delayed availability.
- No unexpected 301 canonical/trailing‑slash redirects: direct, cache‑friendly 200 responses.
- Versioned, discoverable endpoint (
/wp-json/all-sites-cron/v1/run) integrates with the WP REST index and tooling. - Consistent structured JSON by default plus optional GitHub Actions text via
?ga=1. - Proper HTTP status codes (e.g. 429 for rate limiting, 400 for invalid context) instead of a blanket 200.
- Easy extensibility: future endpoints (status, logs, defer mode, auth) can be added under the same namespace without new rewrites.
- Reduced theme / front‑end interference: bypasses template loading and front‑end filters tied to
template_redirect. - Better compatibility with CDNs and monitoring: REST semantics and headers are predictable and cache‑aware.
- Straightforward integration in external systems (CI/CD, orchestration) that already speak JSON.
- Built‑in argument handling and potential for schema/permission hardening via
permission_callback. - Clean separation of concerns: routing (REST) vs. execution logic (cron dispatcher) improves maintainability.
- Clear place to implement enhancements (rate limiting, future defer/background mode, auth tokens, metrics) with minimal risk.
- Easier automated testing using WP REST API test utilities (no need to simulate front‑end rewrite resolution).
- Avoids canonical redirect filter hacks previously needed to suppress 301s on
/dss-cron. - Safer for multi‑environment deployments (no dependency on rewrite flush timing during deploy pipelines).
Copyright and License
All Sites Cron is copyright 2024–2025 Per Soderlind
All Sites Cron is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.
All Sites Cron is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with the Extension. If not, see http://www.gnu.org/licenses/.
Migration Note
The plugin was renamed from "DSS Cron" (slug: dss-cron) to "All Sites Cron" (slug: all-sites-cron). The old REST namespace dss-cron/v1 is still registered for backward compatibility, but you should migrate your automation scripts to use all-sites-cron/v1. Legacy WordPress filters like dss_cron_number_of_sites continue to work; new code should use the all_sites_cron_* equivalents.