function sendMessage($queue, $data, $delay = 0) { $data['randomize'] = md5(rand(0, 1000000000) . rand(0, 1000000000) . rand(0, 1000000000)); $score = date("U") + $delay; Redis::zadd('cinnamon-queue-' . $queue, $score, json_encode($data)); if (Config::get('queue.auto_run', false) && defined('__APP__')) { $base_path = __APP__; if (!file_exists($base_path . "/commands/subscribe.php")) { $base_path = __APP__ . "/vendor/cinnamonlab/queue"; } $ip = $_SERVER['SERVER_ADDR']; $process = Redis::get('cinnamon-process-' . $ip); if ($process != null) { if ($process > date('U') - 600) { Redis::publish('cinnamon-process', $queue); return $this; } ob_start(); system("ps ax|grep commands/subscribe.php| grep -v grep"); $process = trim(ob_get_clean()); if (strlen($process) > 0) { Redis::set('cinnamon-process-' . $ip, date('U')); Redis::expire('cinnamon-process-' . $ip, 1200); Redis::publish('cinnamon-process', $queue); return $this; } else { Redis::del('cinnamon-process-' . $ip); } $process = null; } $cmd = "nohup " . Config::get('queue.php_path', '/usr/bin/php') . " " . $base_path . "/commands/subscribe.php {$ip} > /dev/null &"; exec($cmd); Redis::publish('cinnamon-process', $queue); } return $this; }