一起养成写作习惯!这是我参与「掘金日新计划 · 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。- 使用
timedatectl查看当前时区; - 更改时区设定前可以先搜索一下时区列表
timedatectl list-timezones; - 默认时区可以设置为上海
sudo timedatectl set-timezone Asia/Shanghai。
三、切换python版本
💡 如果你需要的requests、pymysql之类的依赖的话,应该要使用python3,这里指的是”应该“。-
Linux的命令行软链接地址为:
/usr/bin; -
centos7默认带有python2.7以及python3.6,默认python命令是指向的python2.7;
-
如何修改python指令的默认指向;
# 首先删除之前已有的软链接 rm /usr/bin/python # 创建新的软链接到python3.6 ln -s /usr/bin/python3.6 /usr/bin/python -
需要注意点是,只切换了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()