Python crontab: автоматическое добавление символа новой строки и отключение других заданий cron. - PullRequest
1 голос
/ 30 января 2020

Я написал python скрипт для запуска определенных заданий cron и использования crontab для него.

Ниже приведен фрагмент кода:

import os
import inspect
from crontab import CronTab

def add_cron_job(scripts_list,frequency):
    my_cron = CronTab(user='simrat')
    for script in scripts_list:
        if not cron_exists(my_cron,script):
            command = 'python {}'.format(script)
            job = my_cron.new(command=command, comment=script)
            job.minute.every(frequency)

    my_cron.write()

def cron_exists(my_cron, script):
    for job in my_cron:
        if job.comment == script:
            return True
    return False

if __name__ == "__main__":
    #Frequency of every 1 minute
    test_script = ['test1.py', 'test2.py']
    add_cron_job(test_script,1)

    #Frequency of every 1 day
    test_script2 = ['test3.py']
    add_cron_job(test_script2,1440)

Ниже приведен вывод 'crontab -e' (обратите внимание, добавлены дополнительные пробелы)


* * * * * python test1.py # test1.py
* * * * * python test2.py # test2.py

*/1440 * * * * python test3.py # test3.py

Когда я повторно запускаю сценарий python cron_job, он каким-то образом отключает последний cron_job (test3.py), а после выводится crontab file:


* * * * * python test1.py # test1.py
* * * * * python test2.py # test2.py

# DISABLED LINE
# */1440 * * * * python test3.py # test3.py

*/1440 * * * * python test3.py # test3.py

вместе с ошибкой, которая выдается на консоли:

No handlers could be found for logger "crontab"

Итак, мой вопрос в 3 раза:

  1. Почему дополнительное место в верхней части команды при запуске my_cron.write ()?

  2. Почему он отключает последнее задание cron вместо того, чтобы игнорировать его, как оно уже существует (def cron_exits должен был занять позаботьтесь об этом)

  3. Какое значение имеет выброшенная ошибка?

1 Ответ

1 голос
/ 30 января 2020

Я запустил ваш код и получил следующую ошибку при втором запуске:

'1440', not in 0-59 for Minutes

Я изменил 1440 на 14 и запустил код несколько раз. И каждый раз находил один и тот же код (без удаления)


* * * * * python test1.py # test1.py
* * * * * python test2.py # test2.py

*/14 * * * * python test3.py # test3.py

Я не прочитал полный код CronTab, но ясно, что они установили некоторый валидатор во время чтения существующих команд cron, но не проверяют его во время письмо.

Также я позвонил add_cron_job с разными аргументами и обнаружил, что каждый раз, когда вызывается my_cron.write(), он добавляет новую строку. Это не ошибка, а функция.

Наконец, No handlers could be found for logger "crontab" - проблема с журналированием. Попробуйте эту проблему Crontab Logger

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...