VPS Plesk no ejecuta cron.daily

En un par de máquinas VPS Plesk 10.4.4 que tenemos con Axarnet no funciona cron correctamente. El caso es que todo parece estar correcto, los ficheros del cron, permsisos, los logs no reflejan nada…

Nos pusimos a revisar ficheros y llegamos a este punto /etc/crontab. En crontab se definen las horas a las que se ejecutan los cron de hourly, daily, weekly y monthly.

En debian/ubuntu la forma de ejecutar estos cron es esta :

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Con lo que si queremos testear la ejecución directamente vemos que si /usr/bin/anacron se puede ejecutar no se hace nada. Si vemos los permisos, comprobamos que sí es ejecutable :

 stat /usr/sbin/anacron
  File: `/usr/sbin/anacron'
  Size: 29632     	Blocks: 64         IO Block: 4096   regular file
Device: 92adh/37549d	Inode: 30526104    Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-01-11 12:59:10.000000000 +0100
Modify: 2009-11-02 04:48:41.000000000 +0100
Change: 2013-01-11 12:59:11.000000000 +0100

Esto huele a problema con la plantilla … y googleando un poco hemos encontrado algunas referencias y en concreto esta: http://forum.parallels.com/showthread.php?t=258358

La solución rápida es desinstalar y reinstalar el paquete anacron o crear los ficheros /etc/cron.{hourly,daily,weekly,monthly}/0anacron Que son los que faltan.

apt-get remove --purge anacron
apt-get install anacron

El contenido del fichero 0anacron:

/etc/cron.daily/0anacron 
#!/bin/sh
#
# anacron's cron script
#
# This script updates anacron time stamps. It is called through run-parts
# either by anacron itself or by cron.
#
# The script is called "0anacron" to assure that it will be executed
# _before_ all other scripts.

test -x /usr/sbin/anacron || exit 0
anacron -u cron.daily

Prestashop redirecciones CMS no manteninete content_only

En Prestashop puedes crear contenido estático, páginas CMS con su propio minieditor CMS. Lo podeis encontrar en el backend / herramientas / CMS. Este contenido puede ser estar traducido a varios idiomas y es aquí donde puede que se nos presente un pequeño problema que vamos a resolver.

Si por ejemplo me creo un contenido CMS de informacion de mi tienda y lo pongo en ingles y castellano, con el ID = 2, la url quedaría algo así
[shell]
http://localhost/prestashop/content/2-informacion
[/shell]

Vale ahora si desde el frontend de la tienda visito la url, se redirijá a castellano o a ingles y quedará algo como esto :

[shell]
# castellano
http://localhost/prestashop/es/content/2-informacion
# ingles
http://localhost/prestashop/en/content/2-informacion
[/shell]

Con lo que si yo maqueto mi tienda con que ponga el primer enlace en un link para que la gente consulte la información de mi tienda no tendré que preocupar del idioma del visitante de la web, ya que se redirijá según el idioma que tenga almacenado en su cookie.

Pero imaginate que quieres que esta información aparezca en una ventana modal con jquery, en ese caso sólo queremos el contenido sin cabeceras, ni menús ni piés de página. Para eso se usa el parámetro content_only=1. Pues bien este parámetro no se mantiene en las redirecciones y para ello tenemos que crear un fichero en override/controllers/CMSController.php:

[shell]
< ?php class CMSController extends CMSControllerCore { public function canonicalRedirection() { // Automatically redirect to the canonical URL if the current in is the right one // $_SERVER['HTTP_HOST'] must be replaced by the real canonical domain if (Configuration::get('PS_CANONICAL_REDIRECT') && strtoupper($_SERVER['REQUEST_METHOD']) == 'GET') { if (Validate::isLoadedObject($this->cms) AND $canonicalURL = self::$link->getCMSLink($this->cms)){

if (!preg_match(‘/^’.Tools::pRegexp($canonicalURL, ‘/’).'([&?].*)?$/’, Tools::getProtocol().$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’]))
{

if ( Tools::getValue(‘content_only’) == 1 ){
$canonicalURL .= “?content_only=1”;

}

header(‘HTTP/1.0 301 Moved’);
header(‘Cache-Control: no-cache’);
if (_PS_MODE_DEV_)
die(‘[Debug] This page has moved
Please use the following URL instead: ‘.$canonicalURL.’‘);

Tools::redirectLink($canonicalURL);
}
}

if (Validate::isLoadedObject($this->cms_category) AND $canonicalURL = self::$link->getCMSCategoryLink($this->cms_category))
if (!preg_match(‘/^’.Tools::pRegexp($canonicalURL, ‘/’).'([&?].*)?$/’, Tools::getProtocol().$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’]))
{
header(‘HTTP/1.0 301 Moved’);
header(‘Cache-Control: no-cache’);
if (_PS_MODE_DEV_ )
die(‘[Debug] This page has moved
Please use the following URL instead: ‘.$canonicalURL.’‘);
Tools::redirectLink($canonicalURL);
}
}
}

}
[/shell]