-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworker.php
More file actions
62 lines (54 loc) · 1.38 KB
/
worker.php
File metadata and controls
62 lines (54 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
/**
* Background job worker script.
*
* Processes jobs from the queue. Can be run:
* - Manually: php worker.php
* - Via cron: Every 5 minutes: php /path/to/worker.php
* - As a daemon: php worker.php --daemon
*
* Usage:
* php worker.php [--daemon] [--max-jobs=N] [--sleep=N]
*/
require_once __DIR__ . '/vendor/autoload.php';
use PhpRss\Config;
use PhpRss\Database;
use PhpRss\Queue\Worker;
// Initialize
Config::reset();
Database::init();
Database::setup();
// Parse command line arguments
$daemon = in_array('--daemon', $argv);
$maxJobs = 0;
$sleep = Config::get('jobs.worker_sleep', 5);
foreach ($argv as $arg) {
if (strpos($arg, '--max-jobs=') === 0) {
$maxJobs = (int)substr($arg, 11);
} elseif (strpos($arg, '--sleep=') === 0) {
$sleep = (int)substr($arg, 8);
}
}
if ($daemon) {
// Run continuously
echo "Worker started in daemon mode. Press Ctrl+C to stop.\n";
while (true) {
Worker::run(0, $sleep);
// Small delay to prevent tight loop
usleep(100000); // 0.1 seconds
}
} else {
// Process jobs once
$processed = 0;
while (Worker::processNext()) {
$processed++;
if ($maxJobs > 0 && $processed >= $maxJobs) {
break;
}
}
if ($processed > 0) {
echo "Processed {$processed} job(s).\n";
} else {
echo "No jobs to process.\n";
}
}