如何在Linux上使用定时任务执行python脚本

1,243 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

具体的场景为:在Linux服务器中使用定时任务插件实现python或shell脚本定时启动。

一、crontab——Linux自带定时任务管理

💡 老生常谈的crontab问题。

crontab有几点好处:

  • 随着系统的开关而开关,重启自动开启任务,不用操心服务器状态;
  • crontab支持多种的脚本启动;
  • 如果语法没有写对的情况下保存会有相应的报错。 【2022.4.07补充】crontab在修改Linux默认时区后并不会生效,设置的时间将是现有的时间减8小时。
    【2022.4.20补充】可以使用nohup 输出实时log到本地文件中
nohup python /home/crontab/demo.py > /home/crontab/nohup.log 2>&1 &

更多有关crontab定时任务的设定的可以参考工具网站,切记选择Linux。

# crontab 定时任务清单查看
crontab -l
# crontab 定时任务清单编写
crontab -e
# python脚本设置
# 每周1-5的14点和12点执行
0 12,14 * * 1-5 python /home/crontab/demo.py
# shell脚本设置
# 在 凌晨00:10运行
10 0 * * * /home/swz/aa.sh

二、Linux修改时区

💡 当你在使用Linux执行这些定时任务的时候会发现系统的时区与当前所在地不同,当然,如果手动增加8个小时也是可以解决啦。up to u。
  1. 使用timedatectl查看当前时区;
  2. 更改时区设定前可以先搜索一下时区列表timedatectl list-timezones
  3. 默认时区可以设置为上海sudo timedatectl set-timezone Asia/Shanghai

三、切换python版本

💡 如果你需要的requests、pymysql之类的依赖的话,应该要使用python3,这里指的是”应该“。
  1. Linux的命令行软链接地址为:/usr/bin

  2. centos7默认带有python2.7以及python3.6,默认python命令是指向的python2.7;

  3. 如何修改python指令的默认指向;

    # 首先删除之前已有的软链接
    rm /usr/bin/python
    # 创建新的软链接到python3.6
    ln -s /usr/bin/python3.6 /usr/bin/python
    
  4. 需要注意点是,只切换了python的版本是不够的,pip可能还是指向的之前的2.7版本,两个版本需要一致。

四、Python的日志编写

💡 稍微做点解释
  • 日志只要声明了,logging相关的语句会自动的写入本地文件;
  • 本地文件的名称和地址以下默认为日期,因为是追加方式写入,一天内启动多次也只会产生一个文件,后续可以采用另一个定时任务去删除log文件,up to u;
  • logging中的配置,level是最低输出的log级别,跟spring中使用slfj、lombok的log是一样的,如果我没记错的话。默认为warning,切记,logging.INFO这个需要大写;
  • 更多有关python日志的内容可以参考网站
# 当天日期
now_time = datetime.datetime.now().strftime('%Y-%m-%d')
# 配置输出文件到日期为名的log中,且以追加的方式写入
log_address = '/home/crontab/log/'+now_time+'.log'
# 格式化log前缀
fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
# 声明logging配置
bc = logging.basicConfig(filename=log_address,filemode='a',level=logging.INFO,format=fmt)

# 使用logging
logging.info()
logging.warning()
logging.error()