mac/linux自带定时任务执行crontab的使用

本文介绍了如何使用CronTab进行定时任务配置,包括编辑定时任务信息、解决Python脚本运行问题及设置环境变量等。此外,还分享了避免中文乱码的方法。

1.编辑定时任务信息

sudo crontab -e  #以root用户创建,也可以 -u 参数

编辑内容如下:

 频率表达式分别对应为 分、时、日、周、月  

LANG=zh_CN.UTF-8
*/30 * * * * cd /Users/ziponlll/PycharmProjects/exportTodayPV && ./export.sh

 

2.crontab运行python脚本时(不局限为python,主要是系统环境变量问题),发现不运行

  因为是以root用户运行,是以系统环境变量运行的,没找到python3路径

  所以在要执行的shell文件中加入(可以在shell文件中source前后echo $PATH查看区别)

  source /Users/ziponlll/.bash_profile

示例如下:

  

echo $PATH >test.log
source /Users/ziponlll/.bash_profile
echo $PATH >>test.log
echo "job start" >>test.log
python3 -V >>test.log
nohup python3 /Users/ziponlll/PycharmProjects/test/test.py >test.log 2>&1 &

 

  

3.crontab如下编辑内容,直接电脑执行python3 test.py文件,中文不会报错,使用crontab中文会报错,要在编辑crontab中加入以下  

LANG=zh_CN.UTF-8

转载于:https://www.cnblogs.com/zipon/p/8366790.html

<think>嗯,用户之前问了如何用Python从MySQL查数据并去重写入文件,现在接着问如何定期执行这个任务。我需要考虑用户可能的需求是什么。他们可能想自动化这个过程,比如每天自动导出数据,避免手动运行脚本。 首先,用户可能是开发人员或者数据分析师,负责定期生成报告或者数据备份。定期执行的方法有很多种,我需要列举几种常见的方式,比如系统自带定时任务工具crontab、Task Scheduler),或者用Python内部的调度库,比如APScheduler,甚至使用Celery这样的分布式任务队列。不过考虑到用户可能更倾向于简单易行的方案,应该先推荐系统自带工具,比如crontab或Windows的任务计划程序,因为这些不需要修改现有代码,配置相对简单。 然后,用户可能关心每种方法的步骤,需要详细说明。比如在Linux使用crontab,如何编写定时任务,在Windows下如何通过任务计划程序设置。同时,可能需要提醒用户注意路径问题,比如Python环境和脚本的绝对路径,避免因为相对路径导致的错误。 另外,用户可能对代码的健壮性有要求,比如添加日志记录、错误处理,这样在定时执行时出现问题能及时发现。比如在脚本中加入try-except块,记录成功或失败的信息到日志文件,方便后续排查。 还有,用户可能需要考虑数据更新的问题,比如每次导出是覆盖还是追加。但根据之前的回答,用户是去重后写入,可能每次导出都是全量数据,所以覆盖应该没问题。不过如果有增量需求,可能需要修改查询语句,按时间筛选数据,这时候可以在回答中提及,作为扩展建议。 还要注意安全性问题,比如数据库密码在脚本中的保存方式,是否应该使用环境变量或配置文件,避免硬编码。但用户之前的示例代码是直接写在配置里,可能需要提醒他们改进,比如使用configparser或者环境变量来保护敏感信息。 最后,用户可能想知道如何验证定时任务是否正常工作,可以建议他们先手动测试脚本,确认无误后再配置定时任务,并查看日志文件确认执行情况。同时,提醒他们监控任务执行情况,避免因为脚本错误导致任务堆积或资源占用过高。</think>好的,以下是实现定期执行任务的几种常见方法及具体操作步骤: --- ### **方法一:使用操作系统内置的定时任务工具** #### **Linux/Mac 系统:Cron** 1. **创建脚本** 将你的 Python 脚本保存为 `.py` 文件(如 `export_data.py`),确保脚本顶部添加 `#!/usr/bin/env python3` 并赋予可执行权限: ```bash chmod +x export_data.py ``` 2. **配置 Cron 任务** 通过 `crontab -e` 编辑定时任务添加一行配置。例如每天凌晨1点执行: ```bash 0 1 * * * /usr/bin/python3 /path/to/export_data.py >> /path/to/export.log 2>&1 ``` - `>> /path/to/export.log`:将输出(包括报错)重定向到日志文件。 - `2>&1`:将标准错误合并到标准输出。 --- #### **Windows 系统:任务计划程序** 1. **创建脚本** 保存 Python 脚本(如 `export_data.py`)。 2. **配置任务计划** - 打开 **任务计划程序** → 创建任务: - **触发器**:设置定时执行(如每天凌晨1点)。 - **操作**:选择 `启动程序`,填写 Python 解释器路径(如 `C:\Python39\python.exe`)和脚本路径(如 `D:\scripts\export_data.py`)。 - **条件**:取消勾选“只有在计算机使用交流电源时才启动此任务”(避免因电源模式导致任务不执行)。 - **日志**:在脚本中添加日志输出功能(见下文代码示例)。 --- ### **方法二:使用 Python 调度库(如 `schedule` 或 `APScheduler`)** 适合需要长期运行的程序(如后台服务)。 #### **示例代码(APScheduler)** ```python from apscheduler.schedulers.blocking import BlockingScheduler import pandas as pd from sqlalchemy import create_engine # 数据库配置和查询逻辑(与之前相同) def fetch_and_save(): try: engine = create_engine(connection_str) df = pd.read_sql_query(query, con=engine) df_cleaned = df.drop_duplicates() df_cleaned.to_csv('./unique_records.csv', index=False) print("任务执行成功") except Exception as e: print(f"任务失败: {str(e)}") # 创建调度器 scheduler = BlockingScheduler() # 每天凌晨1点执行 scheduler.add_job(fetch_and_save, 'cron', hour=1) try: scheduler.start() except KeyboardInterrupt: scheduler.shutdown() ``` --- ### **方法三:结合外部工具(如 Airflow、Celery)** 适合复杂任务流或分布式场景: 1. **Apache Airflow** 定义 DAG 工作流,设置定时触发器: ```python from airflow import DAG from airflow.operators.python_operator import PythonOperator from datetime import datetime def run_export(): # 调用之前的脚本逻辑 pass dag = DAG( 'daily_data_export', schedule_interval='0 1 * * *', # 每天1点 start_date=datetime(2023, 1, 1) ) task = PythonOperator( task_id='export_data', python_callable=run_export, dag=dag ) ``` --- ### **关键优化建议** 1. **日志记录** 在脚本中添加日志模块,记录每次执行时间和结果: ```python import logging logging.basicConfig( filename='export.log', level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s' ) try: # 执行任务 logging.info("任务开始执行") except Exception as e: logging.error(f"任务失败: {str(e)}") ``` 2. **异常处理** 添加 `try-except` 块捕获数据库连接失败、文件写入错误等异常。 3. **增量更新** 若数据量较大,可在 SQL 查询中按时间过滤增量数据(而非全量导出): ```sql SELECT * FROM your_table WHERE update_time > LAST_EXPORT_TIME ``` --- ### **总结** - **轻量级需求**:直接使用操作系统定时任务(Cron/任务计划程序)。 - **灵活控制**:选择 `APScheduler` 在 Python 内部管理调度。 - **企业级场景**:通过 Airflow 或 Celery 实现分布式、可监控的任务流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值