Cronlike scheduler running inside a ReactPHP Event Loop

Overview

Cronlike scheduler running inside a ReactPHP Event Loop

Continuous Integration Latest Stable Version Total Downloads Code Coverage License

Install

To install via Composer, use the command below, it will automatically detect the latest version and bind it with ^.

composer require wyrihaximus/react-cron

Usage

Schedule actions within the ReactPHP Event Loop

use React\Promise\PromiseInterface;
use WyriHaximus\React\Cron;
use WyriHaximus\React\Cron\Action;

use function React\Promise\resolve;

Cron::create(
    new Action(
        'Hour', // Identifier used for mutex locking locking
        60, // TTL for the mutex lock, always set this way higher than the expected execution time, but low enough any failures during the run will cause issues
        '@hourly', // The cron expression used to schedule this action
        function (): PromiseInterface { // The callable ran when this action is due according to it's schedule
            echo 'Another hour has passed!', PHP_EOL;

            return resolve(true); // This callable MUST return a promise, which is used for releasing the mutex lock
        }
    ),
    new Action(
        'Minute',
        0.1,
        '* * * * *',
        function (): PromiseInterface {
            echo 'Another minute has passed!', PHP_EOL;

            return resolve(true);
        }
    )
);

// Stops scheduling new action runs
$cron->stop();

Factory methods

  • Cron::create($loop, ...$actions): Cron with in-memory mutex.
  • Cron::createWithMutex($loop, $mutex, ...$actions): Cron with supplied mutex.

Mutex

All mutexes must implement wyrihaximus/react-mutex to provide additional implementations beyond the default in memory one. This is meant to do distributed locking of cron jobs.

License

The MIT License (MIT)

Copyright (c) 2021 Cees-Jan Kiewiet

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • Bump react/promise from 2.7.1 to 2.8.0

    Bump react/promise from 2.7.1 to 2.8.0

    Bumps react/promise from 2.7.1 to 2.8.0.

    Release notes

    Sourced from react/promise's releases.

    v2.8.0

    • Mark FulfilledPromise, RejectedPromise and LazyPromise as deprecated for Promise v2 (and remove for Promise v3). (#143 and #165 by @clue)

      // deprecated
      $fulfilled = new React\Promise\FulfilledPromise($value);
      $rejected = new React\Promise\RejectedPromise($reason);
      

      // recommended alternatives $fulfilled = React\Promise\resolve($value); $rejected = React\Promise\reject($reason);

    • Fix: Fix checking whether cancellable promise is an object and avoid possible warning. (#168 by @smscr and @jsor)

    • Improve documentation and add docblocks to functions and interfaces. (#135 by @CharlotteDunois)

    • Add .gitattributes to exclude dev files from exports. (#154 by @reedy)

    • Improve test suite, run tests on PHP 7.4 and update PHPUnit test setup. (#163 by @clue)

    Changelog

    Sourced from react/promise's changelog.

    • 2.8.0 (2020-05-12)

      • Mark FulfilledPromise, RejectedPromise and LazyPromise as deprecated for Promise v2 (and remove for Promise v3). (#143 and #165 by @clue)

        // deprecated
        $fulfilled = new React\Promise\FulfilledPromise($value);
        $rejected = new React\Promise\RejectedPromise($reason);
        

        // recommended alternatives $fulfilled = React\Promise\resolve($value); $rejected = React\Promise\reject($reason);

      • Fix: Fix checking whether cancellable promise is an object and avoid possible warning. (#168 by @smscr and @jsor)

      • Improve documentation and add docblocks to functions and interfaces. (#135 by @CharlotteDunois)

      • Add .gitattributes to exclude dev files from exports. (#154 by @reedy)

      • Improve test suite, run tests on PHP 7.4 and update PHPUnit test setup. (#163 by @clue)

    Commits
    • f3cff96 Prepare v2.8.0 release
    • a287fc0 Merge pull request #168 from jsor-labs/cancellation-queue-object-check
    • 8feffb8 Add check whether $cancellable is an object
    • f0430ac Merge pull request #165 from clue-labs/deprecate-fulfilled-rejected
    • fb502e2 Mark FulfilledPromise and RejectedPromise as deprecated
    • 0f37290 Merge pull request #163 from clue-labs/2x-php7.4
    • ac2b6a7 Run tests on PHP 7.4
    • 1150e0a Update test suite to PHPUnit 7 and legacy PHPUnit versions
    • 7c98fda Merge pull request #154 from reedy/reedy-patch-2
    • a7da0f8 Add .gitattributes to exclude dev files from exports
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    If all status checks pass Dependabot will automatically merge this pull request.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot-preview[bot] 3
  • Bump wyrihaximus/async-test-utilities from 4.0.0 to 4.0.1

    Bump wyrihaximus/async-test-utilities from 4.0.0 to 4.0.1

    Bumps wyrihaximus/async-test-utilities from 4.0.0 to 4.0.1.

    Release notes

    Sourced from wyrihaximus/async-test-utilities's releases.

    4.0.1

    Documentation ๐Ÿ“š,MarkDown ๐Ÿ“

    CI ๐Ÿšง,Configuration โš™,YAML ๐Ÿ„

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜

    Dependencies ๐Ÿ“ฆ,PHP ๐Ÿ˜

    Commits
    • a315c16 Merge pull request #101 from WyriHaximus/dependabot/composer/wyrihaximus/test...
    • 94553d2 Bump wyrihaximus/test-utilities from 3.7.0 to 3.7.1
    • 017451e Merge pull request #104 from WyriHaximus/Update-license-year-in-license-file
    • 2c12cfb Update license year in license file
    • 6aa3175 Merge pull request #103 from WyriHaximus/Update-readme-license-year
    • 0973b00 Update readme license year
    • 0a1fb3e Merge pull request #102 from WyriHaximus/Port-set-milestone-from-php-test-uti...
    • ca22a27 Port set milestone from php-test-utilities
    • 31c881d Merge pull request #100 from WyriHaximus/dependabot/composer/phpunit/phpunit-...
    • 72c3b43 Bump phpunit/phpunit from 9.5.7 to 9.5.8
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 2
  • Bump guzzlehttp/guzzle from 7.3.0 to 7.4.4

    Bump guzzlehttp/guzzle from 7.3.0 to 7.4.4

    Bumps guzzlehttp/guzzle from 7.3.0 to 7.4.4.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 7.4.4

    See change log for changes.

    Release 7.4.3

    See change log for changes.

    Release 7.4.2

    See change log for changes.

    Release 7.4.1

    See change log for changes.

    Release 7.4.0

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    7.4.4 - 2022-06-09

    • Fix failure to strip Authorization header on HTTP downgrade
    • Fix failure to strip the Cookie header on change in host or HTTP downgrade

    7.4.3 - 2022-05-25

    • Fix cross-domain cookie leakage

    7.4.2 - 2022-03-20

    Fixed

    • Remove curl auth on cross-domain redirects to align with the Authorization HTTP header
    • Reject non-HTTP schemes in StreamHandler
    • Set a default ssl.peer_name context in StreamHandler to allow force_ip_resolve

    7.4.1 - 2021-12-06

    Changed

    • Replaced implicit URI to string coercion #2946
    • Allow symfony/deprecation-contracts version 3 #2961

    Fixed

    • Only close curl handle if it's done #2950

    7.4.0 - 2021-10-18

    Added

    Fixed

    • Make sure we always call restore_error_handler() #2915
    • Fix progress parameter type compatibility between the cURL and stream handlers #2936
    • Throw InvalidArgumentException when an incorrect headers array is provided #2916, #2942

    Changed

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 1
  • Bump guzzlehttp/guzzle from 7.3.0 to 7.4.3

    Bump guzzlehttp/guzzle from 7.3.0 to 7.4.3

    Bumps guzzlehttp/guzzle from 7.3.0 to 7.4.3.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 7.4.3

    See change log for changes.

    Release 7.4.2

    See change log for changes.

    Release 7.4.1

    See change log for changes.

    Release 7.4.0

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    7.4.3 - 2022-05-25

    • Fix cross-domain cookie leakage

    7.4.2 - 2022-03-20

    Fixed

    • Remove curl auth on cross-domain redirects to align with the Authorization HTTP header
    • Reject non-HTTP schemes in StreamHandler
    • Set a default ssl.peer_name context in StreamHandler to allow force_ip_resolve

    7.4.1 - 2021-12-06

    Changed

    • Replaced implicit URI to string coercion #2946
    • Allow symfony/deprecation-contracts version 3 #2961

    Fixed

    • Only close curl handle if it's done #2950

    7.4.0 - 2021-10-18

    Added

    Fixed

    • Make sure we always call restore_error_handler() #2915
    • Fix progress parameter type compatibility between the cURL and stream handlers #2936
    • Throw InvalidArgumentException when an incorrect headers array is provided #2916, #2942

    Changed

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 1
  • Bump composer/composer from 1.10.22 to 1.10.23

    Bump composer/composer from 1.10.22 to 1.10.23

    Bumps composer/composer from 1.10.22 to 1.10.23.

    Release notes

    Sourced from composer/composer's releases.

    1.10.23

    • Security: Fixed command injection vulnerability on Windows (GHSA-frqg-7g38-6gcf / CVE-2021-41116)
    Changelog

    Sourced from composer/composer's changelog.

    [1.10.23] 2021-10-05

    • Security: Fixed command injection vulnerability on Windows (GHSA-frqg-7g38-6gcf / CVE-2021-41116)
    Commits
    • eb3bae3 Release 1.10.23
    • ca5e2f8 Fix escaping issues on Windows which could lead to command injection, fixes G...
    • 1a994e4 Update deps
    • 32eb3b4 Update deps
    • a02802b Warn 1.x users when a package is not found that it may be due to our deprecat...
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 1
  • Bump wyrihaximus/react-mutex from 2.0.0 to 3.0.0

    Bump wyrihaximus/react-mutex from 2.0.0 to 3.0.0

    Bumps wyrihaximus/react-mutex from 2.0.0 to 3.0.0.

    Release notes

    Sourced from wyrihaximus/react-mutex's releases.

    3.0.0

    • Total issues resolved: 0
    • Total pull requests resolved: 6
    • Total contributors: 2

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜,Source ๐Ÿ”ฎ,Tests ๐Ÿงช

    Dependencies ๐Ÿ“ฆ,PHP ๐Ÿ˜

    CI ๐Ÿšง,Configuration โš™,YAML ๐Ÿ„

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜

    Commits
    • 5e8a5c7 Merge pull request #22 from WyriHaximus/add-spinlock
    • 8536370 Add Spinlock
    • c520bcb Merge pull request #19 from WyriHaximus/dependabot/composer/react/event-loop-...
    • a763a0f Bump react/event-loop from 1.1.1 to 1.2.0
    • 13efb3a Merge pull request #21 from WyriHaximus/dependabot/composer/composer/composer...
    • 7ed5a00 Bump composer/composer from 1.10.19 to 1.10.22
    • 8e6dcc5 Merge pull request #20 from WyriHaximus/drop-qodana
    • 5b73e9a Drop Qodana
    • 76a6c0c Merge pull request #18 from WyriHaximus/dependabot/composer/wyrihaximus/react...
    • 4a70b79 Bump wyrihaximus/react-mutex-contracts from 1.0.0 to 1.1.0
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 1
  • Bump react/event-loop from 1.1.1 to 1.2.0

    Bump react/event-loop from 1.1.1 to 1.2.0

    Bumps react/event-loop from 1.1.1 to 1.2.0.

    Release notes

    Sourced from react/event-loop's releases.

    v1.2.0

    A major new feature release, see release announcement.

    • Feature: Introduce new concept of default loop with the new Loop class. (#226 by @โ€‹WyriHaximus, #229, #231 and #232 by @โ€‹clue)

      The Loop class exists as a convenient global accessor for the event loop. It provides all methods that exist on the LoopInterface as static methods and will automatically execute the loop at the end of the program:

      $timer = Loop::addPeriodicTimer(0.1, function () {
          echo 'Tick' . PHP_EOL;
      });
      

      Loop::addTimer(1.0, function () use ($timer) { Loop::cancelTimer($timer); echo 'Done' . PHP_EOL; });

      The explicit loop instructions are still valid and may still be useful in some applications, especially for a transition period towards the more concise style. The Loop::get() method can be used to get the currently active event loop instance.

      // deprecated
      $loop = React\EventLoop\Factory::create();
      

      // new $loop = React\EventLoop\Loop::get();

    • Minor documentation improvements and mark legacy extensions as deprecated. (#234 by @โ€‹SimonFrings, #214 by @โ€‹WyriHaximus and #233 and #235 by @โ€‹nhedger)

    • Improve test suite, use GitHub actions for continuous integration (CI), update PHPUnit config and run tests on PHP 8. (#212 and #215 by @โ€‹SimonFrings and #230 by @โ€‹clue)

    Changelog

    Sourced from react/event-loop's changelog.

    1.2.0 (2021-07-11)

    A major new feature release, see release announcement.

    • Feature: Introduce new concept of default loop with the new Loop class. (#226 by @โ€‹WyriHaximus, #229, #231 and #232 by @โ€‹clue)

      The Loop class exists as a convenient global accessor for the event loop. It provides all methods that exist on the LoopInterface as static methods and will automatically execute the loop at the end of the program:

      $timer = Loop::addPeriodicTimer(0.1, function () {
          echo 'Tick' . PHP_EOL;
      });
      

      Loop::addTimer(1.0, function () use ($timer) { Loop::cancelTimer($timer); echo 'Done' . PHP_EOL; });

      The explicit loop instructions are still valid and may still be useful in some applications, especially for a transition period towards the more concise style. The Loop::get() method can be used to get the currently active event loop instance.

      // deprecated
      $loop = React\EventLoop\Factory::create();
      

      // new $loop = React\EventLoop\Loop::get();

    • Minor documentation improvements and mark legacy extensions as deprecated. (#234 by @โ€‹SimonFrings, #214 by @โ€‹WyriHaximus and #233 and #235 by @โ€‹nhedger)

    • Improve test suite, use GitHub actions for continuous integration (CI), update PHPUnit config and run tests on PHP 8. (#212 and #215 by @โ€‹SimonFrings and #230 by @โ€‹clue)

    Commits
    • be6dee4 Prepare v1.2.0 release
    • e3287d6 Merge pull request #234 from SimonFrings/readme
    • 181941f Mark extensions deprecated and minor docs improvement
    • 3441b26 Merge pull request #235 from nhedger/patch-2
    • 53d4ba0 Little typo
    • f52f930 Merge pull request #233 from nhedger/patch-2
    • 6912b3e Fix typo in docblock
    • 78f7f43 Merge pull request #232 from clue-labs/loop-autorun
    • 9712eea Don't run loop automatically when explicitly calling stop()
    • f0853b1 Don't run loop automatically when an uncaught exceptions occurs
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Dependencies ๐Ÿ“ฆ JSON ๐Ÿ‘จโ€๐Ÿ’ผ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 1
  • Bump wyrihaximus/async-test-utilities from 3.4.15 to 3.4.16

    Bump wyrihaximus/async-test-utilities from 3.4.15 to 3.4.16

    Bumps wyrihaximus/async-test-utilities from 3.4.15 to 3.4.16.

    Release notes

    Sourced from wyrihaximus/async-test-utilities's releases.

    3.4.16

    • Total issues resolved: 0
    • Total pull requests resolved: 1
    • Total contributors: 1

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜

    Commits
    • e0e06b2 Merge pull request #81 from WyriHaximus/dependabot/composer/wyrihaximus/test-...
    • 4ab6cde Bump wyrihaximus/test-utilities from 3.5.14 to 3.6.0
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Dependencies ๐Ÿ“ฆ JSON ๐Ÿ‘จโ€๐Ÿ’ผ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 1
  • Call to undefined function Safe\date()

    Call to undefined function Safe\date()

    Hii there,

    I'm trying to implement this library into my app but I get an error that the function "Safe\date()" is undefined, which causes errors (see stacktrace).
    I have tried looking for "Safe\date()" manually, but can't seem to find it anywhere.

    PHP Fatal error:  Uncaught Error: Call to undefined function Safe\date() in F:\repos\FinlayDaG33k\yuuki\vendor\wyrihaximus\react-cron\src\Cron\Scheduler.php:86
    Stack trace:
    #0 F:\repos\FinlayDaG33k\yuuki\vendor\wyrihaximus\react-cron\src\Cron\Scheduler.php(38): WyriHaximus\React\Cron\Scheduler->align()
    #1 F:\repos\FinlayDaG33k\yuuki\vendor\wyrihaximus\react-cron\src\Cron.php(27): WyriHaximus\React\Cron\Scheduler->__construct(Object(Amp\ReactAdapter\ReactAdapter))
    #2 F:\repos\FinlayDaG33k\yuuki\vendor\wyrihaximus\react-cron\src\Cron.php(38): WyriHaximus\React\Cron->__construct(Object(Amp\ReactAdapter\ReactAdapter), Object(WyriHaximus\React\Mutex\Memory), Object(WyriHaximus\React\Cron\Action))
    #3 F:\repos\FinlayDaG33k\yuuki\src\Monitor\DayscheduleMonitor.php(22): WyriHaximus\React\Cron::create(Object(Amp\ReactAdapter\ReactAdapter), Object(WyriHaximus\React\Cron\Action))
    #4 F:\repos\FinlayDaG33k\yuuki\src\Yuuki.php(39): Yuuki\Monitor\DayscheduleMonitor->__construct()
    #5 F:\repos\FinlayDaG33k\yuuki\vendor\amphp\amp\lib\Loop\Driver in F:\repos\FinlayDaG33k\yuuki\vendor\wyrihaximus\react-cron\src\Cron\Scheduler.php on line 86
    
    opened by FinlayDaG33k 1
  • Bump wyrihaximus/react-mutex from 2.0.0 to 3.1.0

    Bump wyrihaximus/react-mutex from 2.0.0 to 3.1.0

    Bumps wyrihaximus/react-mutex from 2.0.0 to 3.1.0.

    Release notes

    Sourced from wyrihaximus/react-mutex's releases.

    3.1.0

    The release unlocks PHP 8!

    PHP 8 Logo

    3.1.0

    • Total issues resolved: 0
    • Total pull requests resolved: 2
    • Total contributors: 2

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜

    Dependencies ๐Ÿ“ฆ,PHP ๐Ÿ˜

    3.0.0

    • Total issues resolved: 0
    • Total pull requests resolved: 6
    • Total contributors: 2

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜,Source ๐Ÿ”ฎ,Tests ๐Ÿงช

    Dependencies ๐Ÿ“ฆ,PHP ๐Ÿ˜

    CI ๐Ÿšง,Configuration โš™,YAML ๐Ÿ„

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜

    Commits
    • 6435b1c Merge pull request #24 from WyriHaximus/unlock-php-8
    • 7ee29f0 Unlock PHP 8
    • aba135e Merge pull request #23 from WyriHaximus/dependabot/composer/wyrihaximus/react...
    • acd0294 Bump wyrihaximus/react-mutex-contracts from 2.0.0 to 2.1.0
    • 5e8a5c7 Merge pull request #22 from WyriHaximus/add-spinlock
    • 8536370 Add Spinlock
    • c520bcb Merge pull request #19 from WyriHaximus/dependabot/composer/react/event-loop-...
    • a763a0f Bump react/event-loop from 1.1.1 to 1.2.0
    • 13efb3a Merge pull request #21 from WyriHaximus/dependabot/composer/composer/composer...
    • 7ed5a00 Bump composer/composer from 1.10.19 to 1.10.22
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 0
  • Bump wyrihaximus/async-test-utilities from 3.4.23 to 3.4.24

    Bump wyrihaximus/async-test-utilities from 3.4.23 to 3.4.24

    Bumps wyrihaximus/async-test-utilities from 3.4.23 to 3.4.24.

    Release notes

    Sourced from wyrihaximus/async-test-utilities's releases.

    3.4.24

    • Total issues resolved: 0
    • Total pull requests resolved: 1
    • Total contributors: 1

    Dependencies ๐Ÿ“ฆ,JSON ๐Ÿ‘จโ€๐Ÿ’ผ,PHP ๐Ÿ˜

    Commits
    • fee2c64 Merge pull request #93 from WyriHaximus/dependabot/composer/wyrihaximus/test-...
    • 57422fa Bump wyrihaximus/test-utilities from 3.6.8 to 3.7.0
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Dependencies ๐Ÿ“ฆ JSON ๐Ÿ‘จโ€๐Ÿ’ผ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 0
  • Bump guzzlehttp/guzzle from 7.3.0 to 7.4.5

    Bump guzzlehttp/guzzle from 7.3.0 to 7.4.5

    Bumps guzzlehttp/guzzle from 7.3.0 to 7.4.5.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 7.4.5

    See change log for changes.

    Release 7.4.4

    See change log for changes.

    Release 7.4.3

    See change log for changes.

    Release 7.4.2

    See change log for changes.

    Release 7.4.1

    See change log for changes.

    Release 7.4.0

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    7.4.5 - 2022-06-20

    • Fix change in port should be considered a change in origin
    • Fix CURLOPT_HTTPAUTH option not cleared on change of origin

    7.4.4 - 2022-06-09

    • Fix failure to strip Authorization header on HTTP downgrade
    • Fix failure to strip the Cookie header on change in host or HTTP downgrade

    7.4.3 - 2022-05-25

    • Fix cross-domain cookie leakage

    7.4.2 - 2022-03-20

    Fixed

    • Remove curl auth on cross-domain redirects to align with the Authorization HTTP header
    • Reject non-HTTP schemes in StreamHandler
    • Set a default ssl.peer_name context in StreamHandler to allow force_ip_resolve

    7.4.1 - 2021-12-06

    Changed

    • Replaced implicit URI to string coercion #2946
    • Allow symfony/deprecation-contracts version 3 #2961

    Fixed

    • Only close curl handle if it's done #2950

    7.4.0 - 2021-10-18

    Added

    Fixed

    • Make sure we always call restore_error_handler() #2915
    • Fix progress parameter type compatibility between the cURL and stream handlers #2936
    • Throw InvalidArgumentException when an incorrect headers array is provided #2916, #2942

    Changed

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 0
  • Bump composer/composer from 1.10.22 to 1.10.26

    Bump composer/composer from 1.10.22 to 1.10.26

    Bumps composer/composer from 1.10.22 to 1.10.26.

    Release notes

    Sourced from composer/composer's releases.

    1.10.26

    • Security: Fixed command injection vulnerability in HgDriver/GitDriver (GHSA-x7cr-6qr6-2hh6 / CVE-2022-24828)

    1.10.25

    • Fixed selfupdate on Windows + PHP 8.1 regression (#10446)

    1.10.24

    1.10.23

    • Security: Fixed command injection vulnerability on Windows (GHSA-frqg-7g38-6gcf / CVE-2021-41116)
    Changelog

    Sourced from composer/composer's changelog.

    [1.10.26] 2022-04-13

    • Security: Fixed command injection vulnerability in HgDriver/GitDriver (GHSA-x7cr-6qr6-2hh6 / CVE-2022-24828)

    [1.10.25] 2022-01-21

    • Fixed selfupdate on Windows + PHP 8.1 regression (#10446)

    [1.10.24] 2021-12-09

    [1.10.23] 2021-10-05

    • Security: Fixed command injection vulnerability on Windows (GHSA-frqg-7g38-6gcf / CVE-2021-41116)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 0
  • Bump guzzlehttp/psr7 from 2.0.0 to 2.2.1

    Bump guzzlehttp/psr7 from 2.0.0 to 2.2.1

    Bumps guzzlehttp/psr7 from 2.0.0 to 2.2.1.

    Release notes

    Sourced from guzzlehttp/psr7's releases.

    2.2.1

    See change log for changes.

    2.2.0

    See change log for changes.

    2.1.2

    See change log for changes.

    2.1.1

    See change log for changes.

    2.1.0

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/psr7's changelog.

    2.2.1 - 2022-03-20

    Fixed

    • Correct header value validation

    2.2.0 - 2022-03-20

    Added

    • A more compressive list of mime types
    • Add JsonSerializable to Uri
    • Missing return types

    Fixed

    • Bug MultipartStream no uri metadata
    • Bug MultipartStream with filename for data:// streams
    • Fixed new line handling in MultipartStream
    • Reduced RAM usage when copying streams
    • Updated parsing in Header::normalize()

    2.1.1 - 2022-03-20

    Fixed

    • Validate header values properly

    2.1.0 - 2021-10-06

    Changed

    • Attempting to create a Uri object from a malformed URI will no longer throw a generic InvalidArgumentException, but rather a MalformedUriException, which inherits from the former for backwards compatibility. Callers relying on the exception being thrown to detect invalid URIs should catch the new exception.

    Fixed

    • Return null in caching stream size if remote size is null
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    Dependencies ๐Ÿ“ฆ PHP ๐Ÿ˜ 
    opened by dependabot[bot] 0
Releases(3.1.0)
Owner
Cees-Jan Kiewiet
@WyriMaps, @reactphp core maintainer, highly interested in asynchronous programming, and generic maniac
Cees-Jan Kiewiet
PHP cron job scheduler

PHP Cron Scheduler This is a framework agnostic cron jobs scheduler that can be easily integrated with your project or run as a standalone command sch

Giuseppe Occhipinti 698 Jan 1, 2023
:date: Easy!Appointments - Open Source Appointment Scheduler

Easy!Appointments A powerful Open Source Appointment Scheduler that can be installed on your server. About โ€ข Features โ€ข Setup โ€ข Installation โ€ข License

Alex Tselegidis 2.5k Jan 8, 2023
Flow Framework Task Scheduler

This package provides a simple to use task scheduler for Neos Flow. Tasks are configured via settings, recurring tasks can be configured using cron syntax. Detailed options configure the first and last executions as well as options for the class handling the task.

Flowpack 11 Dec 21, 2022
xcron - the souped up, modernized cron/Task Scheduler for Windows, Mac OSX, Linux, and FreeBSD server and desktop operating systems.

xcron is the souped up, modernized cron/Task Scheduler for Windows, Mac OSX, Linux, and FreeBSD server and desktop operating systems. MIT or LGPL.

CubicleSoft 7 Nov 30, 2022
Laravel Cron Scheduling - The ability to run the Laravel task scheduler using different crons

Laravel Cron Scheduling Laravel Task Scheduling is a great way to manage the cron. But the documentation contains the following warning: By default, m

Sergey Zhidkov 4 Sep 9, 2022
A PHP-based job scheduler

Crunz Install a cron job once and for all, manage the rest from the code. Crunz is a framework-agnostic package to schedule periodic tasks (cron jobs)

null 58 Dec 26, 2022
Revolt is a rock-solid event loop for concurrent PHP applications.

Revolt is a rock-solid event loop for concurrent PHP applications.

Revolt PHP 586 Jan 2, 2023
A high-performance event loop library for PHP

?? A high-performance event loop library for PHP ??

workbunny 13 Dec 22, 2022
Event-driven, streaming HTTP client and server implementation for ReactPHP

HTTP Event-driven, streaming HTTP client and server implementation for ReactPHP. This HTTP library provides re-usable implementations for an HTTP clie

ReactPHP 640 Dec 29, 2022
A PHP implementation of a bare task loop.

TaskLoop A PHP implementation of a bare task loop. Installation. $ composer require thenlabs/task-loop 1.0.x-dev Usage. The file example.php contains

ThenLabs 1 Oct 17, 2022
Simple Loop Class

Simple Loop Class

ฤฐsa Eken 19 Aug 12, 2022
Official website of Giada Loop Machine. Powered by NodeJS, SASS, Pug and other beautiful JavaScript machineries.

Giada WWW Official website of Giada Loop Machine, proudly powered by NodeJS, SASS, Pug and other beautiful JavaScript machineries. What is Giada? Giad

Monocasual Laboratories 14 Oct 7, 2022
PHP cron job scheduler

PHP Cron Scheduler This is a framework agnostic cron jobs scheduler that can be easily integrated with your project or run as a standalone command sch

Giuseppe Occhipinti 698 Jan 1, 2023
:date: Easy!Appointments - Open Source Appointment Scheduler

Easy!Appointments A powerful Open Source Appointment Scheduler that can be installed on your server. About โ€ข Features โ€ข Setup โ€ข Installation โ€ข License

Alex Tselegidis 2.5k Jan 8, 2023
Flow Framework Task Scheduler

This package provides a simple to use task scheduler for Neos Flow. Tasks are configured via settings, recurring tasks can be configured using cron syntax. Detailed options configure the first and last executions as well as options for the class handling the task.

Flowpack 11 Dec 21, 2022
Boostimer - Product Availability Countdown And Scheduler For Woocommerce

Boostimer - Product Availability Countdown And Scheduler For Woocommerce Contributors: zabiranik Donate link: zabiranik/donate Requires at least: 5.0

Zabir Anik 6 Oct 10, 2022
Repository for the last open source version of Booked Scheduler.

Welcome to Booked Scheduler This is a community effort to keep the OpenSource GPLv3 BookedScheduler alive, see History Prerequisites PHP 7.0 or greate

null 259 Jan 5, 2023
Magento 2 - Cron Scheduler by KiwiCommerce

We're not maintaining this extension, if you need any support please contact us at [email protected] Magento 2 - Cron Scheduler by KiwiCommerce

KiwiCommerce 76 Sep 28, 2022
Cron jobs scheduler for Spiral Framework

This is a cron jobs scheduler that can be easily integrated with your project based on spiral framework. The idea was originally inspired by the Laravel Task Scheduling.

Non official Spiral framework packages 5 Dec 15, 2022
xcron - the souped up, modernized cron/Task Scheduler for Windows, Mac OSX, Linux, and FreeBSD server and desktop operating systems.

xcron is the souped up, modernized cron/Task Scheduler for Windows, Mac OSX, Linux, and FreeBSD server and desktop operating systems. MIT or LGPL.

CubicleSoft 7 Nov 30, 2022