У меня есть приложение, которое удаляет файлы, которые были загружены более одного месяца go.
from django.core.management.base import BaseCommand, CommandError
from blacklist_app.models import EntradaHistorial
from datetime import datetime, timedelta
import pytz, subprocess, os
from blacklist.settings import BASE_DIR
class Command(BaseCommand):
help = "Procesa archivos en cola para ser movidos al servidor de destino acorde a la configuración"
tmp = os.path.join(BASE_DIR, 'blacklist_app/tmp')
excel = os.path.join(BASE_DIR, 'blacklist_app/uploaded_files/excel')
json = os.path.join(BASE_DIR, 'blacklist_app/uploaded_files/json')
mv = 'mv {}/{} {}'
rm = 'rm {}/{}'
def handle(self, *args, **options):
max_date = datetime.now() + timedelta(weeks=-1)
preg = "*_{}*".format(max_date.strftime('%Y%m'))
#Se mueven los archivos que deben ser conservados a la carpeta temporal
self.mv_and_rm(self.excel, preg)
self.mv_and_rm(self.json, preg)
max_date.replace(day=1, hour=0, minute=0, tzinfo=pytz.UTC)
#Actualiza los valores de los archivos borrados
EntradaHistorial.objects.filter(fecha__lt=max_date, archivo_borrado=False).update(archivo_borrado=True)
# Mueve los archivos a la carpeta temporal, borra los archivos que deben ser borrados y
# mueve de vuelta los archivos que deben ser conservados
def mv_and_rm(self, dir, preg):
move = self.mv.format(dir, preg, self.tmp)
self.run_command(move)
rm = self.rm.format(dir, '*')
self.run_command(rm)
move_back = self.mv.format(self.tmp, preg, dir)
self.run_command(move_back)
def run_command(self, command):
sh = os.path.join(BASE_DIR,'blacklist_app/management/commands/run_command.sh')
call = "sh {} '{}'".format(sh, command)
print(subprocess.check_output(call))
В той же директории у меня есть скрипт run_command. sh
#!/bin/sh
$1
Эта команда должна запускаться в crontab в первый день каждого месяца, поэтому я вычитаю одна неделя от текущей даты. Сейчас я тестирую его, запустив вручную
Я получаю ошибку
FileNotFoundError: [Errno 2] No such file or directory:
"/code/blacklist_app/management/commands/run_command.sh 'mv
/code/blacklist_app/uploaded_files/excel/*_202003* /code/blacklist_app/tmp'"