На моем Raspberry Pi установлена база данных MySQL. Когда мой Pi запускается, он запускает скрипт Python, который записывает данные в базу данных. Скрипт записывает дату, время и IP-адрес в базу данных.
Сценарий Python для этого отлично работает при запуске из терминала. Однако, когда я пытаюсь запустить скрипт python при запуске, ничего не происходит. Создание cronjob для запуска скрипта Python показало, что возникает ошибка: "ImportError: No module named mysql.connector"
Я просто не уверен, почему скрипт не работает должным образом при запуске, когда он работает, если я запускаю его вручную.
Я попытался запустить скрипт непосредственно из: /etc/rc.local, работающий как:
sudo python /home/pi/PyScripts/py2db.py&
Я также создал sh-скрипт под названием Launcher. Затем я вызываю скрипт python в скрипте sh и вызываю launcher.sh из crontab. Идея сценария запуска заключалась в том, что я мог бы просто добавить дополнительные строки в этот сценарий, если бы я добавил больше вещей в автозагрузку моего Pi.
Сценарий Python запускается нормально при запуске файла launcher.sh или файла py2db.py.
Я создал вывод для contab, чтобы увидеть, что происходит, когда он пытается запуститься.
Кронтаб-код:
@reboot /home/pi/Scripts/launcher.sh >/home/pi/Logs/cronlog 2>&1
launcher.sh
#!/bin/sh
launcher.sh
python /home/pi/PyScripts/py2db.py
Журнал Crontab
Traceback (most recent call last):
File "/home/pi/PyScripts/py2db.py", line 3, in <module>
import mysql.connector
ImportError: No module named mysql.connector
py2db.py
#!/usr/bin/python3
import mysql.connector
import datetime
from ipaddress import IPAddress
import sys
ipaddress = IPAddress()
ip = ipaddress.get_ipaddress()
now = datetime.datetime.now()
time = now.isoformat()
date = now.strftime("%Y-%m-%d")
mydb = mysql.connector.connect(
host="localhost",
user="mark",
passwd="password",
database="mydb"
)
mycursor = mydb.cursor()
sql = "INSERT INTO piLog (date, time, ip) VALUES (%s, %s, %s)"
val = (date, time, ip)
mycursor.execute(sql, val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")
print("[py2db] - Done.")
sys.exit()
Я ожидаю, что скрипт python запустится при запуске и запишет запись в базу данных. Запись добавляет время, дату и IP-адрес в указанную таблицу базы данных.
В настоящее время ничего не происходит при запуске. Скрипт python будет записывать в базу данных только при вызове вручную.
python
наpython3
, который у вас есть в заголовке в скрипте python. Или мудрый стих. Или вы можете из терминала запустить$ python -m pip install mysql-connector
, чтобы установить mysql-connector для вашей текущей установки python. - person Adam   schedule 02.06.2019code Traceback (most recent call last): File "py2db.py", line 10, in <module> ip = ipaddress.get_ipaddress() File "/home/pi/PyScripts/ipaddress.py", line 18, in get_ipaddress return self.get_interface_ipaddress(network) File "/home/pi/PyScripts/ipaddress.py", line 14, in get_interface_ipaddress struct.pack('256s', network[:15]) struct.error: argument for 's' must be a bytes object
- person Sparky3295   schedule 02.06.2019