有需求在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的为准