Limpieza de Espacio en el Social - Alojamiento S3

Hola Marcel.

Estamos seguros de que ese cron es ejecutado por el usuario mastodon? Puede ser que lo ejecute root?

¿Puede que Ruby fuera instalado/actualizado con el usuario mastodon sin “globlal” y el usuario root use otra versión?

Por dar una par de ideas (que quizá ya hayas probado), se puede probar especificando el usuario en el cron o instalando la versión que nos piden de manera global.

1 me gusta

Pues en principio yo creo que debería ser el usuario mastodon (hago el crontab -e des de ese usuario), pero puedo comprobarlo. Vale la pena hacer el doble checkeo.

1 me gusta

Vale, tras pelearme un buen rato creo que he conseguido hacerlo funcionar.

El primer problema es que para que tootctl sepa qué versión de ruby tiene que usar se tiene que ejecutar esta línea:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

Éstas se encuentran en el fichero .bashrc del usuario de mastodon. El problema es que, si bien este se carga al entrar de forma interactiva, cron no ejecuta este fichero y por lo tanto no se exporta la ruta correcta de ruby. Para solucionar eso hay que tener en cuenta dos aspectos:

  1. Para cargar ese fichero se tiene que hacer un source /home/mastodon/.bashrc, el problema es que por defecto no funciona en conexiones no interactivas. Para que sí funcione hay que comentar las sigüientes líneas:
# If not running interactively, don't do anything
#case $- in
#    *i*) ;;
#      *) return;;
#esac

Para evitar modificar el fichero original, lo he hecho en una copia .bashrc-ni a la que llamo en el cron.

  1. Por defecto, cron usa la shell SH, en la que no funciona el source del punto 1. Así pues, para cada orden de cron hay que especificar qué shell usar con la siguiente línea antes del comando.
    SHELL=/bin/bash

Así pues, el cron de mastodon queda así:

# m h  dom mon dow   command
SHELL=/bin/bash
1 1 * * 1 source $HOME/.bashrc-ni; RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove-orphans
SHELL=/bin/bash
1 1 * * 1 source $HOME/.bashrc-ni; RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove
SHELL=/bin/bash
1 1 * * 1 source $HOME/.bashrc-ni; RAILS_ENV=production /home/mastodon/live/bin/tootctl preview_cards remove
SHELL=/bin/bash
1 me gusta

Tras alguna prueba más, he redireccionado los outputs y errores del cron para que si vuelve a fallar lo sepamos…

# m h  dom mon dow   command
SHELL=/bin/bash
1 1 * * 1 source $HOME/.bashrc-ni; RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove-orphans > /home/mastodon/mastodon.media-remove-orphans.log 2> /home/mastodon/mastodon.media-remove-orphans.log
SHELL=/bin/bash
1 1 * * 1 source $HOME/.bashrc-ni; RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove > /home/mastodon/mastodon.media-remove.log 2> /home/mastodon/mastodon.media-remove.log
SHELL=/bin/bash
1 1 * * 1 source $HOME/.bashrc-ni; RAILS_ENV=production /home/mastodon/live/bin/tootctl preview_cards remove > /home/mastodon/mastodon.preview-remove.log 2> /home/mastodon/mastodon.preview-remove.log
SHELL=/bin/bash