Форум сайта python.su
Скрипт подключается к MariaDB после загрузки сервера и висит как фоновый процесс в памяти до следующей перезагрузки. Он содержит только 1 функцию period(), которая апдейтит значение в БД и перезагружает сервер дважды в сутки: в полночь и в полдень.
Мой скрипт запускается через crontab таким образом:
@reboot sleep 90 && /root/bin/Period.py > ~/skript.log 2>&1
1898 ? S 0:00 /usr/bin/python3.8 /root/bin/Period.py
#!/usr/bin/python3.8 import pymysql import sys from time import sleep import datetime import os try: conn = pymysql.connect( user="username", password = "passwd", host = "hostname", port = 3306, database = "db" ) 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()
# cat ~/skript.log
Cursor closed
wait_timeout = 86400 interactive_timeout = 86400
Отредактировано ffrr (Янв. 17, 2021 11:26:52)
Офлайн
Первое что приходит в голову - используйте модуль logging вместо print и задублируйте вывод лога в файл.
Ну и залоггируйте все основные действия.
Все сразу станет понятнее.
type(datetime.datetime.now().hour) <class 'int'>
Офлайн
ffrrУ тебя архитектурно всё смешано в свалку.
Скрипт подключается к MariaDB после загрузки сервера и висит как фоновый процесс в памяти до следующей перезагрузки. Он содержит только 1 функцию period(), которая апдейтит значение в БД и перезагружает сервер дважды в сутки: в полночь и в полдень.
Отредактировано py.user.next (Янв. 18, 2021 04:16:21)
Офлайн
doza_andа у меня так:
now = datetime.datetime.now()
>>> print(type(datetime.datetime.now().hour)) <class 'int'> >>> print(type(now)) <class 'datetime.datetime'>
Офлайн
py.user.nextспасибо, пожалуй Ваш алгоритм получше будет и понагляднее. Теперь надо подумать как же его реализовать))
Офлайн
ffrrИспользуй Shell-скрипты. На них это всё быстро делается. А питон - чисто для записи в базу данных.
Теперь надо подумать как же его реализовать
Отредактировано py.user.next (Янв. 18, 2021 10:45:05)
Офлайн
py.user.nextспасибо, возможно мне так действительно легче будет реализовать с помощью shell скриптов в том числе…
Используй shell-скрипты. На них это всё быстро делается. А питон - чисто для записи в базу данных.
Офлайн
Опишите пожалуйста, справились ли вы и как же все таки удобнее ?
Офлайн