Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jobbyphp/jobby
Manage all your cron jobs without modifying crontab. Handles locking, logging, error emails, and more.
https://github.com/jobbyphp/jobby
Last synced: about 1 month ago
JSON representation
Manage all your cron jobs without modifying crontab. Handles locking, logging, error emails, and more.
- Host: GitHub
- URL: https://github.com/jobbyphp/jobby
- Owner: jobbyphp
- License: mit
- Created: 2012-10-04T20:36:17.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2024-03-29T11:33:54.000Z (9 months ago)
- Last Synced: 2024-10-29T15:18:57.043Z (about 1 month ago)
- Language: PHP
- Homepage: https://packagist.org/packages/hellogerard/jobby
- Size: 225 KB
- Stars: 1,045
- Watchers: 52
- Forks: 155
- Open Issues: 34
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-php - Jobby - A PHP cron job manager without modifying crontab. (Table of Contents / Task Runners)
- awesome-php-cn - Jobby - 一个PHP cron作业管理器没有修改crontab. (目录 / 任务运行者 Task Runners)
- awesome-projects - Jobby - A PHP cron job manager without modifying crontab. (PHP / Task Runners)
- awesome-php - Jobby - A PHP cron job manager without modifying crontab. (Table of Contents / Task Runners)
README
# Jobby, a PHP cron job manager #
[![Total Downloads](https://img.shields.io/packagist/dt/hellogerard/jobby.svg)](https://packagist.org/packages/hellogerard/jobby)
[![Latest Version](https://img.shields.io/packagist/v/hellogerard/jobby.svg)](https://packagist.org/packages/hellogerard/jobby)
[![Build Status](https://img.shields.io/travis/jobbyphp/jobby.svg)](https://travis-ci.org/jobbyphp/jobby)
[![MIT License](https://img.shields.io/packagist/l/hellogerard/jobby.svg)](https://github.com/jobbyphp/jobby/blob/master/LICENSE)Install the master jobby cron job, and it will manage all your offline tasks. Add jobs without modifying crontab.
Jobby can handle logging, locking, error emails and more.**NEW REPO:** We have moved `jobby` to a Github org. Please update your remotes to `https://github.com/jobbyphp/jobby.git`.
## Features ##
- Maintain one master crontab job.
- Jobs run via PHP, so you can run them under any programmatic conditions.
- Use ordinary crontab schedule syntax (powered by the excellent [`cron-expression`]()).
- Run only one copy of a job at a given time.
- Send email whenever a job exits with an error status.
- Run job as another user, if crontab user has `sudo` privileges.
- Run only on certain hostnames (handy in webfarms).
- Theoretical Windows support (but not ever tested)## Getting Started ##
### Installation ###
The recommended way to install Jobby is through [Composer](http://getcomposer.org):
```
$ composer require hellogerard/jobby
```Then add the following line to your (or whomever's) crontab:
```
* * * * * cd /path/to/project && php jobby.php 1>> /dev/null 2>&1
```After Jobby installs, you can copy an example file to the project root.
```
$ cp vendor/hellogerard/jobby/resources/jobby.php .
```### Running a job ###
```php
add('CommandExample', [// Run a shell command
'command' => 'ls',// Ordinary crontab schedule format is supported.
// This schedule runs every hour.
'schedule' => '0 * * * *',]);
$jobby->run();
```## Examples ##
### Logging ###
```php
add('LoggingExample', [
'command' => 'ls',
'schedule' => '0 * * * *',
// Stdout and stderr is sent to the specified file
'output' => 'logs/command.log',]);
/* ... */
```### Disabling a command ###
```php
add('DisabledExample', [
'command' => 'ls',
'schedule' => '0 * * * *',
// You can turn off a job by setting 'enabled' to false
'enabled' => false,]);
/* ... */
```### Running closures ###
When running closures, beware that nothing outside of the closure is visible (see #93)!
```php
add('ClosureCommandExample', [
// Use the 'closure' key
// instead of 'command'
'closure' => function() {
echo "I'm a function!\n";
return true;
},
'schedule' => '0 * * * *',]);
/* ... */
```### Using a DateTime ###
```php
add('DateTimeExample', [
'command' => 'ls',
// Use a DateTime string in
// the format Y-m-d H:i:s
'schedule' => '2017-05-03 17:15:00',]);
/* ... */
```### Using a Custom Scheduler ###
```php
add('Example', [
'command' => 'ls',
// Use any callable that returns
// a boolean stating whether
// to run the job or not
'schedule' => function(DateTimeImmutable $now) {
// Run on even minutes
return $now->format('i') % 2 === 0;
},]);
/* ... */
```## Supported Options ##
Each job requires these:
Key | Type | Description
:-------- | :------ | :---------------------------------------------------------------------------------------------------------
schedule | string | Crontab schedule format (`man -s 5 crontab`) or DateTime format (`Y-m-d H:i:s`) or callable (`function(): Bool { /* ... */ }`)
command | string | The shell command to run (exclusive-or with `closure`)
closure | Closure | The anonymous PHP function to run (exclusive-or with `command`)The options listed below can be applied to an individual job or globally through the `Jobby` constructor.
Global options will be used as default values, and individual jobs can override them.Option | Type | Default | Description
:------------- | :-------- | :---------------------------------- | :--------------------------------------------------------
runAs | string | null | Run as this user, if crontab user has `sudo` privileges
debug | boolean | false | Send `jobby` internal messages to 'debug.log'
_**Filtering**_| | | _**Options to determine whether the job should run or not**_
environment | string | null or `getenv('APPLICATION_ENV')` | Development environment for this job
runOnHost | string | `gethostname()` | Run jobs only on this hostname
maxRuntime | integer | null | Maximum execution time for this job (in seconds)
enabled | boolean | true | Run this job at scheduled times
haltDir | string | null | A job will not run if this directory contains a file bearing the job's name
_**Logging**_ | | | _**Options for logging**_
output | string | /dev/null | Redirect `stdout` and `stderr` to this file
output_stdout | string | value from `output` option | Redirect `stdout` to this file
output_stderr | string | value from `output` option | Redirect `stderr` to this file
dateFormat | string | Y-m-d H:i:s | Format for dates on `jobby` log messages
_**Mailing**_ | | | _**Options for emailing errors**_
recipients | string | null | Comma-separated string of email addresses
mailer | string | sendmail | Email method: _sendmail_ or _smtp_ or _mail_
smtpHost | string | null | SMTP host, if `mailer` is smtp
smtpPort | integer | 25 | SMTP port, if `mailer` is smtp
smtpUsername | string | null | SMTP user, if `mailer` is smtp
smtpPassword | string | null | SMTP password, if `mailer` is smtp
smtpSecurity | string | null | SMTP security option: _ssl_ or _tls_, if `mailer` is smtp
smtpSender | string | jobby@<hostname> | The sender and from addresses used in SMTP notices
smtpSenderName | string | Jobby | The name used in the from field for SMTP messages## Symfony integration ##
Symfony bundle for Jobby - [imper86/jobby-cron-bundle](https://github.com/imper86/jobby-cron-bundle)
## Credits ##
Developed before, but since inspired by [whenever]().
[Support this project](https://cash.me/$hellogerard)