Django команда запуска сценария оболочки - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть приложение, которое удаляет файлы, которые были загружены более одного месяца 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'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...