Estoy intentando agregar un trabajo cron sencillo para que se ejecute en mi contenedor Docker. Quiero que se añada durante la configuración para que se ejecute automáticamente cuando ./launcher rebuild app finalice.
El trabajo cron funciona cuando lo agrego manualmente al archivo /etc/cron.d/anacron con vim, pero si lo edito sin entrar y guardar el archivo (es decir, con echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron), cron parece no detectar el cambio y no ejecuta el trabajo.
Si luego agrego un espacio en cualquier parte del archivo con vim y guardo, cron detecta el cambio y comienza a ejecutar el trabajo.
Dado que los cambios no se detectan al agregarlos con el comando echo, agregar este comando a mi archivo app.yml no funciona.
También probé docker restart app después de agregar los cambios con echo, pero aún así no funcionó.
Siento que debería haber una forma más sencilla que se me está escapando. Tener que editar el archivo anacron después de la configuración parece la forma incorrecta de hacerlo.
¡Gracias por responderme! Quizás esto tenga más sentido:
Estoy ejecutando un repositorio de Discourse alojado de forma privada con algunos archivos personalizados.
Tengo un archivo en el directorio script de Discourse llamado email_me.py.
Al ejecutarse, este archivo me envía un correo electrónico que dice “¡Hola Mundo!”.
Quiero crear una tarea cron en el contenedor Docker de Discourse que ejecute este archivo cada minuto.
Esto se puede lograr agregando manualmente la línea * * * * * root python3 /var/www/discourse/script/email_me.py al archivo /etc/cron.d/anacron usando un editor como vim.
Quiero que la tarea cron anterior se ejecute cuando se configure el contenedor de Discourse; sin embargo, no puedo usar vim para hacerlo desde el archivo app.yml.
Intenté usar echo -n '* * * * * root python3 /var/www/discourse/script/email_me.py' >> /etc/cron.d/anacron como comando en el archivo app.yml. Esto agrega correctamente la línea al archivo anacron, pero la tarea NO se ejecuta (como si el cambio no se hubiera registrado).
Simplemente estoy tratando de encontrar una forma de que la tarea: * * * * * root python3 /var/www/discourse/script/email_me.py
se ejecute después de reconstruir con ./launcher rebuild app.
Deberías realmente seguir el consejo de @eviltrout y hacerlo correctamente en un plugin utilizando nuestras tareas programadas de Sidekiq.
Pero si quieres jugar con esos cambios no compatibles en cron, probablemente necesitarás reiniciar el servicio después de agregar un trabajo con sv restart cron.
Además, para ser más claro, me interesa saber cuál es tu objetivo final, no los pasos que estás utilizando para lograrlo. Si el objetivo es recibir un correo electrónico cada minuto, puedes hacerlo en un trabajo de Sidekiq dentro de un plugin y es significativamente más sencillo.
Mi objetivo final es ejecutar una consulta de base de datos en busca de actividad específica de usuarios y enviar un correo electrónico con una tabla que contenga los resultados. Este correo servirá como confirmación de pago previo, ya que los usuarios que realizaron dicha actividad serán pagados más tarde en el día (vía PayPal) mediante otro script ejecutado por cron.
Ya tengo scripts que pueden hacer ambas cosas, pero solo necesito encontrar una manera de que el contenedor de Discourse los ejecute una vez por semana.
No estoy familiarizado con Sidekiq. Si puede hacer esto, ¿dónde debería buscar para aprenderlo?
¡Gracias!
(También intenté sv restart cron y muchos otros métodos para reiniciar cron, pero sin éxito)
Sí, eso funcionó perfectamente. Tuve que crear la carpeta rr y los archivos cron.d.rr. Puse mi tarea programada en el archivo cron.d.rr y el cp funcionó.
¡Gracias!
Ahora a investigar cómo escribir un plugin adecuado…