Tengo un contenedor de Google Cloud Run que actúa como un servidor express.
Los usuarios finales cargan archivos en un directorio temporal, los proceso y devuelvo un archivo.
Me gustaría limpiar la carga original (y otros archivos intermedios) para que no ocupen memoria.
Pero los documentos dicen que no se garantiza que el código después de la respuesta se ejecute.
Entonces, ¿cómo/dónde elimino los archivos temporales?
He aquí un ejemplo simplificado:
// process user upload, then: res.download('someFile'); fs.unlinkSync('someFile') // not guaranteed to run; return null;Con Cloud Run, puede usar la función CPU siempre ENCENDIDA . No es el más barato, pero está especialmente diseñado para seguir trabajando en segundo plano, incluso si no hay una solicitud atendida. Y eso, hasta 15 minutos después del envío de la última respuesta y si no hay una nueva solicitud en la instancia.
Si usa Cloud Functions 1st gen, puedo recomendarle que limpie el directorio /tmp cuando comience a procesar sus Cloud Functions, no al final.
Nota: Cloud Functions 2nd gen es similar a Cloud Run
EDITAR 1
Puedes jugar con el sistema y hackearlo para implementar lo que quieras.
Después de devolver la respuesta, puede crear un proceso en segundo plano que elimine el archivo específico en /tmp.
Debido a que ya no tiene acceso a la CPU, esa instrucción estará en espera.
PERO, cuando se recibe la siguiente solicitud, la CPU vuelve a funcionar para toda la instancia (no para la solicitud actual) y, por lo tanto, su proceso en segundo plano se reanudará y eliminará los archivos.
Si la instancia no recibe una nueva solicitud durante los próximos 15 minutos, se descargará y la memoria (y sus archivos) se borrarán automáticamente.