程序部署在服务器
材料:
pycharm
服务器资源
程序
在服务器上跑程序的两种方法
1、将pycharm中的项目映射到服务器上,配置远程解释器,在本地跑程序就是在服务器上运行程序。(便于调试程序)
2、将pycharm中的项目upload到服务器上,在服务器上配置环境,运行程序。(可以在服务器上不终止的跑程序)
具体操作:
pycharm 中打开Settings/Preferences设置deployment
设置deployment
登录服务器
找一个未被占用的端口port
查看后台进程可以用命令
top
查看端口号占用情况:
netstat -apn |grep port
确定进程号:
ps -aux|grep pid
杀掉进程:
kill -9 pid
将程序中服务器listen()改成这个未被占用的端口上
在服务器上安装anaconda
conda create -n newenvirement python=3.6
conda activate newenvirment
pip install requiremens
设置pycharm的远程解释器
将解释器的目录设置到newenvirment上
这时在本地运行程序就是在服务器上运行程序
这时外部就可以通过http://ip:port/,来访问你的程序
要想让本地程序关闭,外部还可以访问就需要将程序upload到服务器上
pycharm中,tools/deployment/config
这个config刚才已经设置过一次了,因为要将程序upload到服务器上,所以要设置mapping
本地路径和服务器上的路径都要填写一下
在tools/deployment/中还可以设置auto upload,每次更新完了就可以自动upload
然后在服务器上找到要运行的程序python一下就行了
但是此时关闭terminal,服务器上的成长就中止了,外部就访问不了了
此时就需要nohup python test.py
这条命令
不中断的运行程序
例:nohup python test.py &
加&是让其转入后台运行,而不在前台显示。
当时nohup这条命令经常会报错,应为没有指定终端需要输出的东西的位置
为了方便查找结果和调试程序可以重定向输出
> test.file 2>&1 &
主要是中间的 2>&1的意思
这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件test.file里面,
所以结果是标准错误和标准输出都导入文件test.file里面了。
最后谈一下/dev/null文件的作用
这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。
所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里 >/dev/null 2>&1
例
nohup python test.py &>/dev/null 2>&1
程序忽略了标准输入,因为是外面调用api,所以会post一个body进来