Python 定时任务脚本:如何按天生成日志文件
在现代软件开发中,定时任务(Scheduled Tasks)是一个不可或缺的组成部分。很多时候,我们需要定期执行一些操作,比如数据备份、清理临时文件以及运行数据分析等。然而,对于这些任务的执行结果进行记录也是相当重要的,尤其是生成日志文件。本文将介绍如何使用 Python 创建一个定时任务脚本,每天生成一个日志文件。
实际问题
假设我们有一个需求,需要每天从某个网站抓取数据并将其存储到一个日志文件中。如果没有详细的日志记录,我们将很难追踪到数据抓取的历史记录。因此,我们需要编写一个 Python 脚本,能够定时执行并将抓取的结果日志到不同的文件中。
系统设计
在建立这个定时任务脚本之前,我们先来设计一下系统的架构。如下是一个简单的实体关系图,用于展示任务、日志文件和抓取数据的关系。
erDiagram
TASK {
string task_id
string task_name
date task_date
}
LOG_FILE {
string log_id
string log_content
date created_at
}
DATA {
string data_id
string data_content
date fetched_at
}
TASK ||--o{ LOG_FILE : creates
LOG_FILE ||--o{ DATA : contains
实现步骤
我们使用 Python 的 schedule
库来实现定时任务,并用 logging
库来生成日志文件。以下是实现的步骤:
- 安装所需库
- 定义爬取数据的方法
- 设置定时任务
- 记录并生成日志文件
1. 安装所需库
首先,请确保你的 Python 环境已安装 schedule
和 requests
库。如果还没有,您可以使用以下命令进行安装:
pip install schedule requests
2. 定义爬取数据的方法
在这个示例中,我们将模拟从某个网站爬取数据。您可以根据实际需要替换为真实的爬取逻辑。
import requests
def fetch_data():
response = requests.get('
if response.status_code == 200:
return response.json() # 假设返回 JSON 格式的数据
return None
3. 设置定时任务
接下来,使用 schedule
库每隔 24 小时执行一次任务。
import schedule
import time
def job():
data = fetch_data()
if data:
log_data(data)
# 每24小时执行一次
schedule.every(24).hours.do(job)
while True:
schedule.run_pending()
time.sleep(1) # 休眠一秒
4. 记录并生成日志文件
通过 Python 的 logging
库,可以按天创建日志文件。以下是如何实现这个功能。
import logging
import os
from datetime import datetime
# 创建日志目录
log_dir = 'logs'
if not os.path.exists(log_dir):
os.makedirs(log_dir)
# 配置 logging
def setup_logging():
current_date = datetime.now().strftime('%Y-%m-%d')
log_file = os.path.join(log_dir, f'log_{current_date}.log')
logging.basicConfig(filename=log_file, level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
def log_data(data):
setup_logging() # 每次调用日志时才能生成对应日期的日志
logging.info(f'Fetched Data: {data}')
完整代码示例
结合以上所有部分,完整的代码如下:
import requests
import schedule
import logging
import os
from datetime import datetime
import time
# 创建日志目录
log_dir = 'logs'
if not os.path.exists(log_dir):
os.makedirs(log_dir)
def fetch_data():
response = requests.get('
if response.status_code == 200:
return response.json() # 假设返回 JSON 格式的数据
return None
def setup_logging():
current_date = datetime.now().strftime('%Y-%m-%d')
log_file = os.path.join(log_dir, f'log_{current_date}.log')
logging.basicConfig(filename=log_file, level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
def log_data(data):
setup_logging()
logging.info(f'Fetched Data: {data}')
def job():
data = fetch_data()
if data:
log_data(data)
# 每24小时执行一次
schedule.every(24).hours.do(job)
while True:
schedule.run_pending()
time.sleep(1) # 休眠一秒
结论
通过本文的介绍,我们成功地构建了一个定时任务脚本,该脚本能在每天的固定时间抓取数据,并将结果记录到以日期命名的日志文件中。这种方法不仅便于管理和查看日志,也为后期的数据分析提供了便利。如果您有更复杂的需求,可以根据本文介绍的基本框架进行扩展和改进。这正是 Python 灵活性和强大的地方!