Мой скрипт запускается через 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
Дата создания лога - полночь.
Сразу после ребута сервера скрипт видно в списке процессов и лог ~/skript.log пустой.
Я подозреваю, что возможно проблема в параметрах MariaDB или в самом скрипте. Увеличил значение таймаутов для БД (24 часа) в /etc/mysql/mariadb.conf.d/50-server.cnf:
wait_timeout = 86400 interactive_timeout = 86400
но скрипт продолжает слетать после какого-то количества часов и его не видно в списке процессов.