Проблема с питоном croniter со всеми звездочками - PullRequest
0 голосов
/ 26 марта 2019

Я создал скрипт на python для выполнения FTP-передач, который будет запускаться в crontab каждую минуту.Сценарий запрашивает базу данных mysql и переводит язык cron с библиотекой croniter.Если текущая дата и время совпадают с запрограммированной датой, будет выполнена транзакция ftp.

Кажется, что она работает правильно, за исключением случаев, когда в cron заданы минуты и часы в звездочках.С датой, похоже, проблем нет.

Функция crontotime получает в переменной «programmed» время и дату, запрограммированные на языке cron: «* * * * *» или «05 17 * * *"и переводит его на дату и время.

https://crontab.guru/ за помощь

Спасибо.

 def crontotime(self,programada):
        crontask = croniter.croniter(programada)
        nextcrontask = crontask.get_next(datetime.datetime).strftime("%Y-%m-%d %H:%M")
        return nextcrontask

Результаты: Если нет определенных минут и часовпоявляется ошибка

========================================================
Now:                    2019-03-25 16:56
Scheluded:   #* 16 * * *#   2019-03-25 16:00 
========================================================
Now:                    2019-03-25 16:56
Scheluded:  #56 16 * * *#   2019-03-25 16:56 
========================================================
Now:                        2019-03-25 17:05 
Scheluded   #* * * * *#     2019-03-25 16:06  ERROR
========================================================
Now:                    2019-03-25 17:05
Scheluded:  #05 17 * * *#   2019-03-25 17:05 
========================================================

1 Ответ

0 голосов
/ 26 марта 2019
class Crontask(object):

def crontask(self,datoscron,ahora):
    for row_task in datoscron:
        programada = (' '.join(i for i in row_task[2:7]).strip())
        nuevatarea = Crontask().crontotime(programada)
        if nuevatarea == ahora:
            FTPtask().ftptask(row_task)
            LogTransfer().log_tareas(row_task)
        else:
            print("========================================================")
            print("///////////////// NO TRANSFER /////////////////////////")
            print("========================================================")
    return

def crontotime(self,programada):
    crontask = croniter.croniter(programada)
    nextcrontask = crontask.get_next(datetime.datetime).strftime("%Y-%m-%d %H:%M")
    return nextcrontask

============================================================= Сейчас: 2019-03-26 11: 57

Запланировано: # * * * * * # 2019-03-26 10: 58

Например: scheduled is * * * * * и время 2019-03-26 11:57, возврат кронштейна 2019-03-26 10:58 еще 1 минута, затем задание никогда не запускается.

...