我正在尝试使用 Ubuntu 虚拟机在 Google Cloud 中部署 Python 应用程序。该脚本应每 1 分钟执行一次。我已经部署了它,当我手动执行它时,它运行得很好,但是,当我使用 cronjob 运行时,它返回空,但数据库中有记录。我已经更改了权限,但没有任何改变。我还使用了数据库的完整路径,但没有用。我正在使用 Peewee ORM 来处理数据库。
皮威模型
from peewee import (
SqliteDatabase, Model, TextField, ForeignKeyField,
DateTimeField, IntegerField, FloatField, CharField, BooleanField
)
import os
from datetime import datetime
absolute_database_path = os.path.abspath("./teste.db")
db = SqliteDatabase(absolute_database_path)
class BaseModel(Model):
class Meta:
database = db
class User(BaseModel):
name = TextField()
email = TextField(unique=True)
phone = TextField()
age = IntegerField()
created_at = TextField(default=datetime.now().strftime("%d-%m-%Y"))
updated_at = TextField(default=datetime.now().strftime("%d-%m-%Y"))
脚本
from models import User
def get_all_users():
try:
users_query = User.select().dicts()
users = []
for user in users_query:
users.append(user)
print(users)
return users
except Exception as e:
message = f"Occurred an exception while retrieving users. {e}"
print(message)
return message
print(get_all_users())
Cron 作业
* * * * * /usr/local/bin/python3.9 /var/www/myscript/main.py >> /var/www/logs/logfile.log 2>&1
我尝试过更改数据库的权限,还指定了数据库的完整路径,尝试记录脚本,并尝试手动执行它。当脚本正常执行时,它会从数据库中检索用户,但是,当 cron 作业执行脚本时,它只返回空。我该如何解决这个问题?
os.path.abspath
在那里不起作用。你想要的是类似的东西:
parent = os.path.dirname(__file__)
filename = os.path.join(parent, 'test.db')