#!/usr/bin/php -q Grava log de erros gerados pelo serviço. * ***************************************************************************************** */ error_reporting(E_ALL); ini_set('display_errors', 1); ini_set("memory_limit", "512M"); /* * Inclui funçoes genéricas. */ include("util/constantes.php"); include("util/util.php"); include("util/cnvrtFunctions.php"); /* * Registra o numero de erros em uma operacao. */ $numErros = 0; /* * Para rodar como um processo normal é preciso passar "N" como primeiro parametro. */ $notDaemon = isset($argv[1]) && ( strtoupper($argv[1]) === 'N'); $notDaemon = true; /* * Mostra o help quando passodo --help no primeiro argumento. */ GetHelp(); /* * Inicializa o daemom quando N não for informado. */ GetDaemon($notDaemon); try { declare(ticks = 1); $statusSignal = 0; pcntl_signal(SIGTERM, "sig_handler"); pcntl_signal(SIGHUP, "sig_handler"); pcntl_signal(SIGUSR1, "sig_handler"); pcntl_signal(SIGINT, "sig_handler"); CnvrtLog(sprintf("Server Start: %s [ok]\n", date("Y-m-d H:i:s"))); $start = 0; while (true) { try { foreach (glob(CNVRT_BASE . "*.snd") as $fileName) { try { /* * Carrega os dados de conversão. */ list($src, $dst, $type, $name) = CnvrtDecodeData($fileName); /* * Seleciona o arquivo que fara a conversão. */ switch ($type) { case CNVRT_WAV_MP3: case CNVRT_WAV_ULAW: case CNVRT_MP3_ULAW: exec(sprintf('%s %s > /dev/null 2>&1 &', CNVRT_CONVERT_AUDIO, CnvrtEncodeData(array($src, $dst, $type, $name, $pathLog)))); break; case CNVRT_FILE_CP: case CNVRT_FILE_MV: case CNVRT_FILE_RM: case CNVRT_FILE_EXISTS: case CNVRT_FILE_SIZE: case CNVRT_EXEC: exec(sprintf('%s %s > /dev/null 2>&1 &', CNVRT_FILE, CnvrtEncodeData(array($src, $dst, $type, $name, $pathLog)))); break; default: break; } } catch (Exception $ex) { $numErros++; CnvrtLog($ex->getMessage()); } /* * Elimina o arquivo de requisicao de dados */ unlink($fileName); } } catch (Exception $ex) { $numErros++; CnvrtLog($ex->getMessage()); } /* * Verifica se o processo deve ser encerrado */ if (sig_status()) break; /* * Tempo do ciclo de atualizações. */ usleep(CNVRT_TEMPO_CICLO); $start++; } CnvrtLog(sprintf("Server Stop: %s [ok]\n", date("Y-m-d H:i:s"))); } catch (Exception $ex) { CnvrtLog($ex->getMessage()); } function GetDaemon($notDaemon) { /* * Se o script não for chamado com daemon sai sem executar nada. */ if ($notDaemon) { return 0; } $pid = pcntl_fork(); if ($pid) { exit(0); //success } // posix_setsid(); } function GetHelp() { global $argc, $argv; $arg = isset($argv[1]) ? $argv[1] : ''; if ($argc && ((stripos($arg, '--h') !== false) || (stripos($arg, '-h') !== false) || (stripos($arg, '/h') !== false))) { return displayUsage(); } } function displayUsage() { echo "-------------------------------------------------------------------------------------------------------\n"; echo "- Servico de conversao de arquivos! -\n"; echo "-------------------------------------------------------------------------------------------------------\n"; echo "- Para rodar como um processo normal passe \"N\" como primeiro argumento:\"./amid.php N\"! -\n"; echo "- Para rodar como Daemon nao passe nenhum argumemento argumento:\"./amid.php \"! -\n"; echo "-------------------------------------------------------------------------------------------------------\n"; echo "\n"; exit(0); } function sig_handler($signo) { global $statusSignal; $statusSignal = 1; } function sig_status() { global $statusSignal; pcntl_signal_dispatch(); return $statusSignal; } ?>