find: `/var/lib/amavis/virusmails/’: No such file or directory

find: `/var/lib/amavis/virusmails/': No such file or directory

Los que usáis la solución http://www.iredmail.org/ como servidor de correo es posible que en alguna ocasión recibáis por correo una alerta como la del título de esta entrada.

Existe un crontab para el usuario amavis que elimina periódicamente los virus encontrados en el correo electrónico, para ello trabaja con la carpeta /var/lib/amavis/virusmails donde va dejando los rastros encontrados.

# Delete virus mails which created 15 days ago.
1 5 * * * find /var/lib/amavis/virusmails/ -ctime +15 | xargs rm -rf {}

Se puede editar con la orden siguiente:

crontab -e -u amavis

Si no se reciben virus en 15 días se borrará el directorio virusmails, y con el próximo virus como mucho se irán concatenando los mismos en un fichero llamado igual, con lo que la orden find (que espera sea una carpeta) dejará de funcionar y recibiremos el mencionado error:

find: `/var/lib/amavis/virusmails/’: No such file or directory

La solución pasa por cambiar justo antes de la búsqueda, la fecha de modificación de la mencionada carpeta: un simple touch delante del find, que se ejecute justo antes de la limpieza, así como y usar -mtime en lugar de -ctime. El crontab del usuario ‘amavis’ debería quedar así:

# Delete virus mails which created 15 days ago.
1 5 * * * touch /var/lib/amavis/virusmails; find /var/lib/amavis/virusmails/ -mtime +15 | xargs rm -rf {}

Si seguís recibiendo el Warning

Debe ser porque la carpeta ya no existe, basta recrearla mediante un mkdir, pero dejando los permisos correctos de usuario y grupo ‘amavis‘, tal y como aparece en la salida de este comando ls:

ls -ld /var/lib/amavis/virusmails
drwxr-x--- 2 amavis amavis 4096 sep 6 2014 /var/lib/amavis/virusmails

Para ello tenemos varias alternativas, os dejo dos:

  1. Ubicaros en la carpeta anterior /var/lib/amavis/, y crear el directorio virusmails habiendo suplantado mediante el comando su al usuario ‘amavis‘ (lo podéis hacer si sois root)
cd /var/lib/amavis/

su amavis

mkdir virusmails

2. Cread la carpeta y después mediante chown cambiad tanto usuario propietario como pertenencia a grupo de la misma:

cd /var/lib/amavis/

mkdir virusmails

chown amavis:amavis virusmails

Sólo por si os apetece probar una tercera alternativa, podríamos en lugar de touch, probar a recrear en el crontab la carpeta, y redireccionar el posible error si existe a /dev/null. Por lo que un crontab alternativo (que no he probado) seria este:

# Delete virus mails which created 15 days ago.
1 5 * * * mkdir /var/lib/amavis/virusmails 2> /dev/null; find /var/lib/amavis/virusmails/ -mtime +15 | xargs rm -rf {}

De esta forma, y hablando “teóricamente” crearía si no existe todavía la carpeta y después realizaría la búsqueda, en caso de que exista desbiaría cualquier salida de error 2> a /dev/null, de nuevo teóricamente no sería necesario ya que crontab se ejecuta desatendido, aunque y por tercera vez de forma teórica, posiblemente recibamos un mensaje de error al email diciendo algo así como: “la carpeta ya existe”.

Hasta la próxima

 

1 2 3 4 5 6 7