Скрипт из cron отправляет> 50 сообщений об ошибках, 1 при успехе - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть проблема, которую я действительно не могу выяснить.

Следующие фрагменты из моего скрипта Python архивируют каталог и отправляют письмо в случае успеха.Он также отправляет письмо, если произошла ошибка.И вот в чем проблема:

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

Если скрипт запускается из cron, Я получаю более 50 писем в случае возникновения ошибки (в случае успеха только один)! Все письма имеют одинаковое содержимое (сообщение об ошибке), и все письма отправляются одновременно (точно как "чч: мм").

Это фрагмент скрипта:

def backup(pathMedia, pathZipMedia):
    [...]

    try:
        createArchive(pathMedia, pathZipMedia)
    except Exception as e:
        sendMail('Error in zipping the media dir: ' + str(e))
        sys.exit()

    sendMail('Backup successfully created!')


def sendMail(msg):
    sent = 0
    SMTPserver = '[...]'
    sender =     '[...]'
    destination = ['...']

    USERNAME = '[...]'
    PASSWORD = '[...]'

    text_subtype = 'plain'

    subject='Backup notification'
    content=msg

    try:
        msg = MIMEText(content, text_subtype)
        msg['Subject'] = subject
        msg['From'] = sender

        conn = SMTP(SMTPserver)
        conn.set_debuglevel(False)
        conn.login(USERNAME, PASSWORD)
        try:
            if (sent == 0):
                conn.sendmail(sender, destination, msg.as_string())
                sent = 1
        finally:
            conn.quit()

    except Exception as e:
        sys.exit()

Мой crontab выглядит следующим образом:

## run the backup script every 3 days at 4am
* 4 */3 * * /root/backup.py >/dev/null 2>&1

Я исправил ошибки orrucring сейчас, но это все еще может произойти снова.И мне действительно любопытно, почему эта проблема возникает!

Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2019

* в начале вашей строки crontab говорит: «запускать это задание каждую минуту».

Предположительно, успешный запуск первого задания в 4:00 приводит к тому, что следующие 59 прогонов обнаружат, что нетработа должна быть выполнена, поэтому они не пытаются создать резервную копию и тихо завершают работу, не отправляя электронную почту.Но неудачный прогон в 4:00 оставит работу для следующей работы в 4:01, и снова через минуту после этого, и так далее до 4:59.Все эти задания пытаются создать резервную копию, и все они терпят неудачу, поэтому вы получаете что-то вроде 60 сообщений об ошибках.(Или меньше, если одному из заданий удается выполнить успешно, разрывая цепочку сбоев.)

Чтобы исправить строку crontab для запуска задания только один раз в 4:00, измените первое * на0.

Я не знаю, почему все ваши письма с ошибками имеют одинаковую метку времени.Вы уверены, что они все одинаковые?Если это так, возможно, они отправляются вашей почтовой системой и им присваивается заголовок Date во время обработки пакета.Или, возможно, все задания запускаются cron, а затем все они ждут, блокируются до истечения некоторого системного тайм-аута или другого события, а затем все они испытывают сбой одновременно и все отправляют электронные письма одновременно.

...