接昨天的情况,因为是陈年老脚本,所以在新分的服务器上搭不出来。问学长也没弄出个所以然,可能是之后的更新导致的细节问题,但是目前任务要紧,先在已经放了python项目且能跑通的老服务器上搭后端环境并做一个配套。
php下载并安装
1
2
3
chmod +x xampp-...
./xampp-...
/opt/lampp/lampp start
进行一些基本的配置
增加端口和目录的对应,不使用默认目录,不然一更新什么都没了。
修改/opt/lampp/etc下的配置文件即可,注意不显示目录,和限制文件下载。处于安全,不然网站容易被打成筛子
1
2
3
4
5
6
<FilesMatch "\.(sh|json)">
Order Deny,Allow
Deny from all
</FilesMatch>
# 这是加载Docunmentroot这项里的
编写shell脚本调用
因为这个python脚本需要先激活环境才能跑,想到通过写一个shell来调用它,结果写入文件,php调shell读文件即可。
发现shell不能空行,会报not found 行号 得错误。进一步多次研究,发现需要在shell脚本里登录用户,因此得安装except和tcl
命令记录一下
1
2
3
4
5
6
sudo ./configure
sudo make
sudo make install
sudo ./configure --with-tclinclude=/home/pengpai/pengyuan/tcl8.4.19/generic/ --with-tclconfig=/usr/local/lib/
sudo make
sudo make install
继续改进方案
最大的问题现在是,linux服务器划分了很细的权限,一个shell脚本必须先登录适当的用户。最终写出了下面这个版本的shell,注意一定别忘了写\r
1
2
3
4
5
6
7
8
9
10
spawn su - 需要的用户名
expect "*密码*"
send "密码\r"
expect "*$*"
## 等待提示符出现
send "cd 需要的版本的环境目录\r"
expect "*$*"
send "./python 目标python和参数\r"
expect "*$*"
exit
继续改进方案1.0
上面的可行,但是从完成的代码的视角实在是不好看,主要是很多目录贼长,实际的代码可读性变得很差,并且是直接用环境对应的python进行运行的。此外还要让脚本从外界接收参数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set text [lindex $argv 0]
## 获取参数
spawn su - 用户名
expect "*密码*"
send "密码\r"
## 登录有对应权限的用户
expect "*$*"
send "source ~/conda.sh\r"
expect "*$*"
send "conda activate py35\r"
## 激活环境
expect "*$*"
send "cd 脚本所在目录\r"
expect "*$*"
send "python extract_demo.py $text\r"
expect "*$*"
## 执行
exit
写php
写个php调shell,然后用php处理结果返回。任务完成。注意system会返回执行过程,因此用system调试很方便,最后再用exec。
其他参考资料