使用 Python 在 Pi 启动时写入 MySQL 数据库

Write to MySQL databse on Pi startup using Python

我的 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&

我还创建了一个名为 launcher 的 sh 脚本。然后我在 sh 脚本中调用 python 脚本并从 crontab 调用 launcher.sh。启动器脚本背后的想法是,如果我向 Pi 的启动添加更多内容,我可以向该脚本添加 exra 行。

python 脚本在 运行 连接 launcher.sh 文件或 py2db.py 文件时正常启动。

我为 contab 创建了一个输出,以查看当它尝试 运行 时会发生什么。

Crontab 代码:

@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 地址添加到指定的数据库 table.

目前启动时没有任何反应。 python 脚本只会在手动调用时写入数据库。

似乎当您 运行 将您的脚本作为 cronjob 时,它找不到正确的 PYTHONPATH。首先,使用以下脚本找到您的模块路径:

import os
import mysql
mysql_path = os.path.dirname(mysql.__file__)
print(mysql_path)

接下来在导入之前添加 mysql_pathsys.path mysql:

#!/usr/bin/python3

from ipaddress import IPAddress
import datetime
import mysql.connector
import sys
sys.path.append('<mysql_path>')


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()