LINUX.ORG.RU
ФорумAdmin

Python скрипт не выполняется из-за ошибки Mysql

 , ,


0

1

Python скрипт запускается через крон:

@reboot sleep 60 && /root/bin/Period.py > ~/skript.log 2>&1

После ребута сервера он в памяти висит и лог ~/skript.log пустой

   1891 ?        S      0:00 /usr/bin/python3.8 /root/bin/Period.py

Но после какого-то периода времени (наверное после очередного ребута), скрипт не видно в списке процессов и в логе появляется:

# cat ~/skript.log
(2006, "MySQL server has gone away (ConnectionResetError(104, 'Connection reset by peer'))")

Внутри скрипта есть функция перезагрузки сервера каждые 12 часов.

Изменил значение параметра wait_timeout для mysql до 12 часов

wait_timeout  43200

Но теперь после ребута скрипт в памяти висит и после какого-то периода времени слетает снова, но в логе теперь такое пишет:

# cat ~/skript.log
(2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")

Ответ на: комментарий от zorinquen

не помогло, после какого-то периода времени скрипт слетает снова.Теперь в логе:

Cursor closed
zorinquen ()

а какое отношение к твоей проблеме имеет crontab? падает скрипт — показывай скрипт, а то по твоим огрызкам вообще ничего не понять

pohepi ()
Ответ на: комментарий от pohepi

crontab имеет только такое отношение, что скрипт запускается в нем…

zorinquen ()
Ответ на: комментарий от zorinquen

Через определенное кол-во времени скрипт все равно отвалился. В логе:

(2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")

Текущие значения timeout-параметров для БД:

connect_timeout = 10
interactive_timeout = 43200
wait_timeout = 43200
zorinquen ()
Ответ на: комментарий от pohepi
#!/usr/bin/python3.8


import pymysql
import sys
from time import sleep
import datetime
import os

try:
    conn = pymysql.connect(
        user="username",
        password = "password",
        host = "hostname",
        port = 3306,
        database = "mydb"
    )
except Exception as e:
    print(f"Error connecting to MariaDB Platform: {e}")
    sys.exit(1)

cur = conn.cursor()

def period():
    try:
        sleep(3600)
        while True:
            now = datetime.datetime.now()
            now = now.hour
            if int(now) == 0:
                cur.execute("SELECT * FROM `permissions`")
                base = cur.fetchall()
                i = 0
                lan = len(base)
                while i < lan:
                    period = int(base[i][4]) - 1
                    if int(period) >= 0:
                        cur.execute("UPDATE `permissions` SET `period`='" + str(period) + "' WHERE `userID`='" + str(base[i][1])+"'")
                        conn.commit()
                        sleep(2)
                        cur.close()
                        conn.close()
                    i += 1
                os.system("reboot")
            elif int(now) == 12:
                os.system("reboot")
            sleep(60)
    except Exception as e:
        print(e)


period()


zorinquen ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.