Files
car/tcp_worker.php
T

45 lines
948 B
PHP

<?php
declare(strict_types=1);
require __DIR__ . '/common.php';
const WORKER_IDLE_SLEEP_USEC = 200000;
if (PHP_SAPI !== 'cli') {
fwrite(STDERR, "tcp_worker.php must run from CLI\n");
exit(1);
}
$lockFp = fopen('/tmp/car_tcp_worker.lock', 'c');
if ($lockFp === false) {
fwrite(STDERR, "failed to open worker lock\n");
exit(1);
}
if (!flock($lockFp, LOCK_EX | LOCK_NB)) {
fwrite(STDERR, "worker already running\n");
exit(0);
}
register_shutdown_function(static function () use ($lockFp): void {
@flock($lockFp, LOCK_UN);
@fclose($lockFp);
});
db_ensure_tcp_queue_schema(db());
while (true) {
try {
$job = tcp_queue_claim_next(db());
if (!$job) {
usleep(WORKER_IDLE_SLEEP_USEC);
continue;
}
tcp_worker_process_job($job);
} catch (Throwable $e) {
fwrite(STDERR, date('c') . ' ' . $e->getMessage() . "\n");
usleep(1000000);
}
}