Problemas al ejecutar .php con ampersand en cron?

Iniciado por ccrunch, 19 Noviembre 2014, 20:44 PM

0 Miembros y 1 Visitante están viendo este tema.

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

Cita de: MinusFour en 19 Noviembre 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

Cita de: ccrunch en 19 Noviembre 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:

Código (text) [Seleccionar]
'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.

Código (text) [Seleccionar]
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

CitarNo 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
Citarurl: (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.

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

print_r($_GET);


Código (bash) [Seleccionar]
php /var/www/cron.php --bot 150 --action check >> /root/pruebacurl.txt

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:
Código (bash) [Seleccionar]
curl http://localhost/var/www/vhosts/midominio.es/httpdocs/cron/cron.php?bot=150&action=check >> /root/pruebacurl.txt

prueba con:
Código (bash) [Seleccionar]
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:

Código (text) [Seleccionar]
/var/www/vhosts/midominio.es/httpdocs/

Entonces deberías poder hacer la consulta a:

Código (text) [Seleccionar]
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!