forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
5.1 KiB
178 lines
5.1 KiB
#!/usr/bin/php -q |
|
<?php |
|
/* * ***************************************************************************************** |
|
* Data: 10/06/2019. |
|
* Autor: Amarildo Pereira |
|
* Descrição: Convercao de arquivos |
|
* Objetivo: O servico tera a funcao de converter arquivos usando o usuarios root e entregando |
|
* o arquivo convertido para o usuarios pbx. |
|
* Funcoes: |
|
* -CnvrtLog -> Grava log de erros gerados pelo serviço. |
|
* ***************************************************************************************** */ |
|
error_reporting(E_ERROR); |
|
ini_set('display_errors', 0); |
|
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 |
|
} |
|
|
|
/* PIDFile SYSTEMD |
|
* SYSTEMD irá monitorar esse pid para verificar se ainda está ativo |
|
*/ |
|
$PIDFile = fopen( "/var/lock/subsys/cnvrtd.pid", "w+" ); |
|
$pid = getmypid( ); |
|
if( $pid == false ){ |
|
exit( 1 ); |
|
} |
|
fwrite( $PIDFile, $pid); |
|
fclose( $PIDFile ); |
|
|
|
} |
|
|
|
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; |
|
} |
|
?>
|