Rodar Script PHP como Processo no Linux [RESOLVIDO]

1. Rodar Script PHP como Processo no Linux [RESOLVIDO]

Anderson Leão Gimenes
leaogimenes

(usa Ubuntu)

Enviado em 29/05/2012 - 16:42h

Olá Pessoal, como vcs estão?

Gente mais uma dúvida, na qual esta eu não sei como fazer...
Anteriormente eu queria executar comandos linux dentro de scripts php, onde estes deveriam executar os comandos (ssh scp e rm -rf) sem senha, ai consegui, dando aos usuários permissão, e gerando as "chaves" publicas para estes executarem os comandos.
Mas agora tenho outra dificuldade.

* Como fazer para que um script php rode como "processo" no Linux?

Qual o motivo:

como eu executo um processo de discagem (ura ativa) dentro do Asterisk, este script executa este processo, e efetua a discagem, onde com isso ele gera um processo, este script é o que vai startar este processo e gerar o "PID" caso o processo inicie:
<html>
<head>
<script>
function controla_ura(info){
document.location.href="index.php?info="+info+"&ura_id="+document.getElementById('ura_id').value;
}
</script>
</head>
<body>
<?php
switch($_REQUEST['info']){
case 1:
$cmd= "sudo autodial_ura.php ".$_REQUEST['ura_id'];
shell_exec($cmd);
echo "<br />ura iniciada";
break;
}
?>

<input type="text" name="ura_id" id="ura_id"/>
<input type="button" value="Inicia Ura" name="Inicia Ura" onclick="controla_ura(1);"/>
<input type="button" value="Parar Ura" name="Parar urar Ura" onclick="controla_ura(0);"/>
</body>
</html>

Este(inicia_ura.php) e o <b>autodial_ura.php,</b> devem ser os que se transformam e processo no Linux, para que ao fim possa matar o processo atraves do PID gerado.

Caso alguém saiba como fazer um script php executar como processo no linux, com certeza ficarei muito grato.

Abs.

Anderson Leão


  


2. MELHOR RESPOSTA

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 05/06/2012 - 00:53h

Seu usuário do apache pode executar esses comandos?
E você chegou a testar o comando do exec fora do php?

Tente a configuração desse tópico: http://www.vivaolinux.com.br/topico/Apache-Web-Server/Configuracao-Apache-1/


Tenho algo parecido no trabalho, só que uso apenas shell ;-)

3. Re: Rodar Script PHP como Processo no Linux [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 29/05/2012 - 22:49h

Basta no inicio o arquivo .php colocar

#!/usr/bin/php

e deixe o arquivo como executável...


4. Entendi... mas...

Anderson Leão Gimenes
leaogimenes

(usa Ubuntu)

Enviado em 30/05/2012 - 09:11h

rai3mb escreveu:

Basta no inicio o arquivo .php colocar

#!/usr/bin/php

e deixe o arquivo como executável...


- Ok este processo já efetuei coloquei a chamada do "Bash", na linha antes das tags do php:
"
#!/usr/bin/php
<?php

blá,blá...

?>
"
Para dar a permissão como executavel eu uso:
chmod +x nome do arquivo.php

Esta correto este processo, pois faço e o mesmo não executa, não localizo o PID dele.

Este é o processo? Tem algo que deixei de fazer?

Abs.

Anderson Leão!


5. Re: Rodar Script PHP como Processo no Linux [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 30/05/2012 - 11:45h

vc executa ele pelo terminal?

nem vai precisar do código html existente, e dependendo da sua necessidade nem precisa de PHP, bastaria o SHell, avalie sua necessidade, muitas vezes apenas Shell script já resolve.


6. Não funciona!

Anderson Leão Gimenes
leaogimenes

(usa Ubuntu)

Enviado em 02/06/2012 - 09:23h

Bom pessoal tentei de todas as formas, mas não consegui. Abaixo segue o Script que cria o arquivo.call para efetuar as ligações no Asterisk, este não roda, mesmo com todas as permissões possíveis, e configurações criadas, caso alguem saiba o pq pode me ajudar fico muito grato:
* Este script roda em outro servidor(asterisk sainte) e atraves de ssh e scp, ele faz o envio do arquivo que gera o telefone.call e o asterisk disca, mas o que acontece, ele não esta enviando o arquivo, nas linhas do "exec". Por este motivo busquei algo sobre, permissões.
#!/usr/bin/php
<?php
set_time_limit(0);

$fp_logs = fopen("/var/log/autodial.log","a+");

include("config.php");

mysql_pconnect(DB_HOST,DB_USER_READ,DB_PASS_READ);
mysql_select_db(DB_NAME);
//$argv[1] = $_GET['id'];
$sql_discador = "SELECT * FROM `central_discadora` WHERE `id`={$argv[1]}";
$query_discador = mysql_query($sql_discador);
$num_discador = mysql_num_rows($query_discador);
if ($num_discador>0){
$data_discador = mysql_fetch_assoc($query_discador);
extract($data_discador);
$hora_inicio = str_replace(array(' ','-',':'),array('','',''),$hora_inicio);
$hora_termino = str_replace(array(' ','-',':'),array('','',''),$hora_termino);
$data_inicio = explode(' ',$data_inicio);
$data_inicio = str_replace(array(' ','-',':'),array('','',''),$data_inicio[0]);
$data_finalizacao = explode(' ',$data_finalizacao);
$data_finalizacao = str_replace(array(' ','-',':'),array('','',''),$data_finalizacao[0]);

} else {
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tDISCADOR {$argv[1]} NÃO EXISTE\n"));
exit(1);
}

fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tCOLETANDO TELEFONES\n"));

$sql = "SELECT CONCAT('0',T.ddd,T.telefone) as numero,";
$sql .= " T.ddd,
T.telefone,
T.cpf_cnpj,
T.id_central_discadora,
(
SELECT
asterisk_context
FROM
central_discadora_contexto
WHERE
id={$id_central_discadora_contexto}
) asterisk_context,
D.nome,CONCAT(T.ddd,T.telefone) AS ddd_numero
FROM
`central_discadora_telefone` T
INNER JOIN tb_devedor D ON
D.cpf_cnpj=T.cpf_cnpj
INNER JOIN tb_divida DV ON
DV.tb_devedor_cpf_cnpj=D.cpf_cnpj
WHERE
(`id_central_discadora`={$argv[1]}) AND
(`status_da_tentativa` IS NULL) AND
(
T.cpf_cnpj NOT IN
(
SELECT
cpf_cnpj
FROM
central_discadora_telefone
WHERE
cpf_cnpj=T.cpf_cnpj AND
(
ddd!=T.ddd AND telefone!=T.telefone
) AND (
(`status_da_tentativa`=5) OR
(`status_da_tentativa`=7) OR
(`status_da_tentativa`=8) OR
(`status_da_tentativa`=9)
)
)
)
GROUP BY
cpf_cnpj
ORDER BY cpf_cnpj ASC, status_da_tentativa ASC";

$query = mysql_query($sql) or die(__FILE__.__LINE__.mysql_error());
$num = mysql_num_rows($query);
//var_dump($query);exit();
fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tSQLSTRING: {$sql}\n"));
fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tTENHO {$num} PARA LIGAR\n"));
if ($num>0){
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tINICIAR EM {$data_inicio}{$hora_inicio}\n"));
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tCONTAGEM ATUAL ".date("YmdHis")."\n"));
while (date("Ymd")>$data_inicio){
if (date("His")<$hora_inicio){
$sql_discador = "SELECT * FROM `central_discadora` WHERE `id`={$argv[1]}";
$query_discador = mysql_query($sql_discador);
$num_discador = mysql_num_rows($query_discador);
if ($num_discador>0){
$data_discador = mysql_fetch_assoc($query_discador);
extract($data_discador);
$hora_inicio = str_replace(array(' ','-',':'),array('','',''),$hora_inicio);
$hora_termino = str_replace(array(' ','-',':'),array('','',''),$hora_termino);
$data_inicio = explode(' ',$data_inicio);
$data_inicio = str_replace(array(' ','-',':'),array('','',''),$data_inicio[0]);
$data_finalizacao = explode(' ',$data_finalizacao);
$data_finalizacao = str_replace(array(' ','-',':'),array('','',''),$data_finalizacao[0]);
} else {
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tDISCADOR {$argv[1]} NÃO EXISTE\n"));
exit(1);
}
}
fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tESTOU AGUARDANDO ATÉ {$data_inicio}{$hora_inicio} SÃO ".date("YmdHis")."\n"));
sleep(60);
}
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tPASSED THE WAIT TIME\n"));
$ligou = 0;
$start = 0;
while ($telefones = mysql_fetch_assoc($query)){
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tTRYING TO CALL TO {$telefones['numero']}\n"));
$telefone = trim($telefones['numero']);
$telefone_semzero = trim($telefones['ddd_numero']);
$telefone = str_replace('"','',$telefone);
$telefone_semzero = str_replace('"','',$telefone_semzero);
if ((strlen($telefone)!=11) || (strlen($telefone_semzero)!=10)) continue;
if ($last_dialed!=''){
if ($start==0){
if ($last_dialed==$telefone){
$start = 1;
continue;
} else {
continue;
}
}
}
fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tWILL DO\n"));
fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tTIME TO END DIALLER ".$data_finalizacao.$hora_termino."\n"));

if (date("YmdHis")>($data_finalizacao.$hora_termino)){
\\fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tURA ENCERRADA DEVIDO O HORÃRIO MÃXIMO ATINGIDO\n"));
exec('sudo ssh root@astersiksainte rm -rf /var/spool/asterisk/outgoing/*', $output);

exit("aguardando horario");
} elseif (date("His")>=$hora_inicio && date("His")<=$hora_termino){
$fp = fopen("/tmp/{$telefone}.call","a+");
if ($fp){
$syntax = 'Channel: '."SIP/tellflex/numerotel{$telefone_semzero}\n"; // 011XXXX0873
$syntax .= 'CallerID: "'.$telefone.'" <'.$telefone.'>'."\n";
$syntax .= 'MaxRetries: 3'."\n";
$syntax .= 'RetryTime: 7200'."\n";
$syntax .= 'WaitTime: 45'."\n";
$syntax .= 'Context: '.$telefones['asterisk_context']."\n";
$syntax .= 'Extension: s'."\n";
$syntax .= 'Priority: 1'."\n";
$syntax .= 'Set: DISCADOR='.$telefones['id_central_discadora']."\n";
$syntax .= 'Set: DDD='.$telefones['ddd']."\n";
$syntax .= 'Set: NUMERO='.$telefones['telefone']."\n";
$syntax .= 'Set: FICHA='.$telefones['cpf_cnpj']."\n";
$syntax .= 'Set: NOME='.$telefones['nome'];
fputs($fp,$syntax);
fclose($fp);
$ligou++;
$cpf = $telefones['cpf_cnpj'];
$nome = addslashes($telefones['nome']);
$cmdFala = "sudo ssh root@URADEVOZ falarNome \\\"{$nome}\\\" {$cpf} &> /dev/null";
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tCMD FALA: {$cmdFala}\n"));
exec($cmdFala, $output);
$comando = "scp /tmp/{$telefone}.call root@asterisksainte:/tmp";
$comando = "scp /tmp/{$telefone}.call root@asteriskteste:/tmp";
exec($comando);
var_dump($comando);
//exit();
exec($comando,$output);
exec("ssh root@asterisksainte sudo rm -rf /tmp/{$telefone}.call");
$sql_discador = "SELECT `tentativas_simultaneas` FROM `central_discadora` WHERE `id`={$argv[1]}";
$query_discador = mysql_query($sql_discador);
$num_discador = mysql_num_rows($query_discador);
if ($num_discador>0){
$data_discador = mysql_fetch_row($query_discador);
} else {
fputs($fp_logs,(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tDISCADOR {$argv[1]} NÃO EXISTE\n"));
exit(1);
}
if ($ligou % $data_discador[0]==0){
sleep(60);
}
} else {
echo "Não pude criar um arquivo aqui.\n";
exit(1);
}
} else {
// fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tURA FORA DO HORÃRIO\n"));
exec('ssh root@asterisksainte rm -rf /var/spool/asterisk/outgoing/*', $output);
echo "URA FORA DO HORÃRIO";
}
}
}
fputs($fp_logs,utf8_decode(date("d/m/Y H:i:s")."\t{$argv[1]}\t-\tTODAS AS LIGAÇÕES FORAM ENCAMINHADAS AO ASTERISK\n"));
fclose($fp_logs);

mysql_close();

exit(0);
?>


7. Opá!

Anderson Leão Gimenes
leaogimenes

(usa Ubuntu)

Enviado em 05/06/2012 - 11:25h

rai3mb escreveu:

Seu usuário do apache pode executar esses comandos?
E você chegou a testar o comando do exec fora do php?

Tente a configuração desse tópico: http://www.vivaolinux.com.br/topico/Apache-Web-Server/Configuracao-Apache-1/


Tenho algo parecido no trabalho, só que uso apenas shell ;-)



Já dei as permições, já configurei o Sudoers, mas acho vou partir para shell, vc tem um script que faz este processo rai3mb?
Se puder me passar para eu adaptar ao que necessito, seria ótimo, isso cado seja possível a você.
Acho que nada melhor do que ir pelos caminhos que o Linux anda, shell é sempre shell.



Abs.

Anderson Leão






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts