• Welcome to Test Foro de elhacker.net SMF 2.1.
 

Problemas al ejecutar .php con ampersand en cron?

Started by ccrunch, 19 November 2014, 20:44 PM

0 Members and 1 Guest are viewing this topic.

ccrunch

Hola a todos. Tengo que ejecutar unos ficheros php en cron, en centos. Esos ficheros llevan ampersands (&) y cuando se envía por mail el reporte, dice que  no se encuentra la ruta, y la ruta que me llega al correo se corta justo donde empieza el ampersand.

Alguien me puede ayudar?

Salu2

MinusFour


ccrunch

Quote from: MinusFour on 19 November 2014, 20:55 PM
Pega tu crontab.
##      *       *       *       *       0-7     lynx -dump 'Can't Access `file://localhost/var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155&action=check'

##      *       *       *       *       0-7     php /var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155&action=check >> /root/pruebadoc.txt

ninguno de los dos funciona, el primer comando del cron me dice:
Can't Access `file://localhostCan't Access `file://localhost//var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155&action=check'
Alert!: Unable to access document.

lynx: Can't access startfile '


El segundo error dice:
Could not open input file: /var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155

Lo que quiero es ejecutar ese script.

Salu2

MinusFour

Quote from: ccrunch on 19 November 2014, 21:12 PM
##      *       *       *       *       0-7     lynx -dump 'Can't Access `file://localhost/var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155&action=check'

##      *       *       *       *       0-7     php /var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155&action=check >> /root/pruebadoc.txt

ninguno de los dos funciona, el primer comando del cron me dice:
Can't Access `file://localhostCan't Access `file://localhost//var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155&action=check'
Alert!: Unable to access document.

lynx: Can't access startfile '


El segundo error dice:
Could not open input file: /var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155

Lo que quiero es ejecutar ese script.

Salu2

Esto no es ningun problema de cron. Le estas pasando a Linx:

Code (text) Select
'Can't Access `file://localhost/var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=155&action=check'

Esto no es un path ni una url. Primero porque está el texto ese de "Can't Access" y segundo porque file:// no hace referencia a un archivo tampoco, hace referencia a una URL.

No existe el archivo cron.php?bot=155&action=check. Existe el archivo cron.php, lo demas es un query string que pertenece a una URL.

Necesitas ejecutar lynx? No puedes hacerlo con curl?

El de php sufre de lo mismo. No existe un archivo cron.php?bot=15.

Code (text) Select
curl http://localhost/script/cron.php?bot=15 >> /path/to/file.txt

ccrunch

Hola, he probado con esto:
curl http://localhost/var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=150&action=check >> /root/pruebacurl.txt
Pero me dice:
curl: (7) couldn't connect to host

QuoteNo existe el archivo cron.php?bot=155&action=check. Existe el archivo cron.php, lo demas es un query string que pertenece a una URL.
Te refieres a que no puedo poner la consulta en el mismo url?

Salu2

#!drvy

#5
Quoteurl: (7) couldn't connect to host

¿ Tienes apache (o algún servidor http) corriendo ?




Tienes que diferenciar entre url y path. La url puede incluir parámetros que el servidor HTTP transforma y envía a el interprete.. la path solo  puede contener la ruta original del archivo y los parámetros se envían de otra forma.

Si no quieres tener que correr un servidor http solo para hacer el cron tendrías que modificar un  poco el script.

Code (php) Select
if(php_sapi_name()==='cli'){
  $params = getopt(null,array('bot:','action:'));
  $_GET['bot'] = $params['bot'];
  $_GET['action'] = $params['action'];
   unset($params);
}

print_r($_GET);


Code (bash) Select
php /var/www/cron.php --bot 150 --action check >> /root/pruebacurl.txt

Code (l) Select
Array
(
   [bot] => 150
   [action] => check
)


Saludos

daryo

#6
edito
. todo lo que habia escrito lo habia puesto dvry antes

edito2
si tienes un servidor ejecutándose
en ves de:
Code (bash) Select
curl http://localhost/var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=150&action=check >> /root/pruebacurl.txt

prueba con:
Code (bash) Select
curl http://tudominio.es/cron/cron.php?bot=150&action=check >> /root/pruebacurl.txt
buenas

MinusFour

Yo diria que estas haciendo una mezcla de url y path otra vez.

Me atreveria a decir que el directorio principal de tu servidor web es:

Code (text) Select
/var/www/vhosts/midominio.es/httpdocs/

Entonces deberías poder hacer la consulta a:

Code (text) Select
http://www.midominio.es/cron/cron.php?bot=150&action=check >> /path/to/file.txt

Depende tambien de tu configuración de tu vhost. (Si permite desde localhost, etc).

ccrunch

Hola, al final lo hice de otra manera porque era mas o menos urgente, pero gracias a todos por la ayuda (y a Dantemc que fue quien me ayudó en la solución final).

gracias de nuevo!