python 定时任务 web管理_【BAE基础版】在Python Web中增加定时任务运行Python脚本

本文介绍了在BAE基础版的Python Web环境中,如何处理crond执行Python脚本时遇到的依赖包导入异常问题。问题源于定时任务未将应用的依赖路径'/home/bae/app/deps'加入到Python模块搜索路径。提供了两种解决方案:一是直接在脚本中添加依赖路径到sys.path;二是通过封装API并使用curl调用来执行定时任务,同时注意权限验证。
摘要由CSDN通过智能技术生成

简介

在BAE Python Web部署中,通过crond定时执行Python脚本时,可能触发定时任务异常。本文主要介绍异常产生原因及解决方案。关于crond使用方法,请参考以下链接:

异常现象

以Python Web中的mongo操作为例,配置app.conf,定时执行mongo db操作脚本。(脚本来源:Pyhon连接MongoDB)

#-*- coding:utf-8 -*-

import pymongo

from pymongo import MongoClient

def test_mongo():

### 连接MongoDB服务

### 从管理控制台获取host, port, db_name, api_key, secret_key

con = MongoClient("mongo.duapp.com", 8908)

db_name = "CAoKTghXtKNEGBaLAYRj" # 数据库名称

db = con[db_name]

api_key = "1df5f7da3c5c48559f34589d83126c6c" # 用户AK

secret_key = "566417acbb6349a98a09cd6f5edbb402" # 用户SK

db.authenticate(api_key, secret_key)

### 插入数据到集合test

collection_name = 'test'

db[collection_name].insert({"id":10, 'value':"test test"})

### 查询集合test

cursor = db[collection_name].find()

con.close()

return "select collection test %s"%str(cursor[0])

test_mongo()

将以上脚本保存在根目录/home/bae/app/mongo.py,并配置app.conf,增加定时任务,定时执行mongo db操作:

crond :

service : on

crontab :

- "* * * * * python /home/bae/app/mongo.py 1>/dev/null 2>>/home/bae/log/mongo.error.log"

部署成功后,我们发现该mongo db的collection中并没有新的记录插入,开通port服务ssh登录到该实例上(参考BAE基础版Port服务),mongo.error.log中的信息显示如下:

Traceback (most recent call last):

File "/home/bae/app/mongo.py", line 3, in

import pymongo

ImportError: No module named pymongo

以上error信息说明在Python Web的定时脚本中运行用户的Python脚本时,无法加载用户自定义的pymongo依赖包。

问题原因

导致该问题的原因如下:

用户自定义依赖配置文件requirements.txt,用于配置编译时的依赖包。开发者部署代码时,requirements.txt中指定的依赖包会下载安装到应用根目录: /home/bae/app/deps (可参考Python部署文件中requirements.txt的说明)。在Python Web中已将 ”/home/bae/app/deps” 添加到Python默认的模块搜索路径,而定时任务并没有添加该目录到默认的模块搜索路径中。

解决方案

在定时任务运行的python脚本中,将”/home/bae/app/deps”添加到Python默认的模块搜索路径中。

方案一,在python脚本mongo.py的开头为Python添加默认模块搜索路径如下:

import sys

sys.path.append('/home/bae/app/deps')

方案二,将需要Python运行的定时任务封装成api,在定时任务中curl该api。同时需要注意为该api增加权限验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值