linux计划任务运行python文件可能遇到的问题

有需求在linux上部署python项目,记录一下遇到的问题

部署后一般都是用脚本或者计划任务来运行的,不会直接python main.py
然后发现命令行启动和用计划任务启动会有些不一样的情况

先说下脚本和计划任务有什么用
脚本可以批量执行写好的命令,通过运行脚本一次执行多个命令
计划任务就像闹钟,在设定好的时间自动执行任务,比如每天早上八点运行run.sh
一般脚本和计划任务都是一起使用的,先把要执行的命令写在脚本里,然后在计划任务里设置运行时间

路径

首先能用绝对路径的都使用绝对路径,使用相对路径可能会出错,包括py文件里也是
py文件修改路径的方法

#获取py文件所在的目录
dir_path = os.path.dirname(os.path.realpath(__file__))
#dirname获取的是py文件所在的绝对路径
#如果绝对路径是a/b/c/d/main.py,那dir_path就是a/b/c/d
#realpath会将软链接转换成真实路径

#路径拼接
log_name = os.path.join(dir_path, 'log.txt')
#基本等同于字符串的拼接,但是join会自动解决不同操作系统分隔符的问题

#截取文件名
os.path.basename(file)
#basename会把分隔符前的路径都去掉

脚本

vim run.sh

直接vim新建一个sh脚本

#!/bin/bash
python main.py

#!/bin/bash 是使用shell运行下面的命令
完成后:wq保存退出
这时候./run.sh就会使用命令行运行python main.py了

计划任务

crontab -e

打开计划任务列表
加入一行任务

10 11 * * * /srv/run.sh

这个任务就是每天11点10分运行/srv/run.sh
然后可以通过

crontab -l

查看已有的计划任务

tail /var/log/cron

查看计划任务的执行情况

检查python位置

方法1

which python

方法2

python #进入python环境
>>> import sys
>>> print(sys.executable)

如果两种方法得到的Python位置不一致的话,以方法2的为准

你可能感兴趣的:(python,linux,开发语言)