教你如何將自己的指令碼程式碼放到伺服器上執行
上次弄了個機器人,反響挺不錯的,我也挺滿意的,因為這個我也初步瞭解了伺服器這個東西,懂得了如何將自己的指令碼程式碼放到伺服器上運行了,媽媽再也不怕我每天都得開著電腦才能執行指令碼了,不過說實話,這個伺服器真貴,不過有阿里雲學生機,想嘗試瞭解下的可以去試試,非常建議去折騰下,可以學到的東西很多。
如果你還沒有了解我的機器人,可以看看 為了你們,我用一天時間做了一個機器人! ,也歡迎大家加我進群哈,大家一起交流學習!
當時為了將程式碼放到伺服器上執行,也花了很多時間,所以避免還有不會的小白同學,記錄下此過程,讓他們少走點坑。
1. 購買伺服器
如果你是學生的話,想折騰的可以去阿里雲那裡購買,因為有學生機優惠,只需要9.9一個月,但是隻能購買一次,在下一次購買需要做任務才可以繼續享用學生機優惠。如果你是土豪的話,可以直接忽略這個。
因為這次我只需要把機器人指令碼執行就可以了,所以直接選擇學生機的配置就夠用了。
阿里雲的學生機購買連結: https://promotion.aliyun.com/...
點選購買即可。
這個密碼是你登陸上伺服器的密碼,需要記住,登陸使用者名稱就是 root。
接下來就是掃碼支付了。
購買了點選阿里雲控制檯,點選雲伺服器ECS,就可以看到你剛才購買的伺服器了。
再點選下面的雲伺服器,你就可以看到這個伺服器的相關配置了
連線伺服器可以在這個頁面的右邊的遠端連線進行連線,這個第一次點進去會有個遠端連線密碼,需要記住,因為每次在這裡進行遠端連線的時候都需要填入這個密碼。
連線成功就會顯示一個黑色框,這裡連線伺服器雖然可以,但是不太方便,這裡推薦大家一個在 window 的免費 ssh 連線工具 putty
2. 在伺服器上配置 Python 環境
需要在伺服器上執行 Python 指令碼 ,就必須要在伺服器上有 Python 的環境,在阿里雲購買的學生機預設就裝有 Python 的,不過版本是 2.7.5。這裡我們重新安裝 Python3,是這個伺服器上可以多個版本共存。
先在 putty 上連線我們的伺服器。
上面的 ip 地址就是我們購買的伺服器的共有ip地址,使用 ssh連線就行了。不過還得設定一個東西,不設定的話,如果超過一段時間不動終端的話,就會自動斷開,又得重新連線。
這裡設定成 60 秒就可以了,原理我現在不太記得了,如果有讀者知道的話,可以在留言區說下。
點選 open,然後填寫使用者名稱 root 和自己之前設定的密碼即可登陸成功,如上圖。
接下來就是開始安裝我們的 Python3 環境了。
先檢視下 centos 伺服器的已安裝的 Python 版本
python -V
我這裡是 3.6.8 版本,因為我重新配置了,如果你第一次使用,這個結果是 python 2.7.5
檢視 python 可執行檔案的路徑
可以看到所在的目錄,進入這個 bin 目錄,並檢視 python 檔案
可以看到我這裡的 python 指向了 python3 這個檔案,但是你們第一次的會指向 python2.7 這個檔案,接下來就是將 python 這個軟連線指向 python3 就行了。如果怕弄壞的,想備份原來 python2 的檔案可以執行 mv python2.7 python.bak 就可以將檔案備份到當前目錄了。
1)先安裝相關包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
需要需要確認時直接輸入 y 即可
2)下載 python 3.6.8 原始碼包
如果覺得下載網速有點慢的話,可以更換阿里雲源,可以參考這個連線: https://blog.csdn.net/qq_3727...
下載 python 3.6.8 包
https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
解壓 python 3.6.8 原始碼包
tar xf Python-3.6.8.tar.xz -C /usr/local/src/
這個是將 python 原始碼包解壓到資料夾 /usr/local/src 內,這裡你也可以自己指定解壓目錄,你自己記得解壓位置即可。
安裝 python3
./configure --prefix=/usr/local/python3
這裡的地址需要指定為自己的 python 原始碼包解壓地址。
編譯
make && make install
這時候可以說安裝 python3 成功了,我們可以使用這個命令檢視
/usr/local/python3/bin/pip3 list
更新 pip 版本
/usr/local/python3/bin/pip3 install --upgrade pip
也可以檢視一下是否更新成功
/usr/local/python3/bin/pip3 list
3)建立軟連線
現在就是需要將 python3 這個檔案建立軟連線,使 python 指向 python3 即可。
ln -s /usr/local/python3/bin/python3 /usr/bin/python
執行之後檢視 python 版本
python -V
成功之後就會看到 python 指向了 python 3.6.8 版本,如果出錯了
bash: python: command not found...
這個是你建立軟連出問題了,可能指定的 python3 安裝路徑不正確,這時候將 python 這個軟連線刪除重新建立即可。
你可以進入 。/usr/bin 目錄,檢視是否建立軟連線成功
若找到 python 這個指向為紅色顯示的,證明建立錯誤了,python3 的地址錯誤了。
這時就刪除這個 python 軟連線
再重新建立 python 軟連線即可
ln -s /usr/local/python3/bin/python3 /usr/bin/python
這前面的地址就是 python3 的安裝路徑,就是有 python3 這個檔案的目錄。
4)修改 yum 配置
因為 yum 原來是使用 python2 的,改了 python3 之後可能會出錯,所以需要重新配置。
修改 yum 檔案
vi /usr/bin/yum
把檔案頭部的#!/usr/bin/python改成#!/usr/bin/python2.7儲存,然後按esc,輸入 :wq 退出即可
修改 urlgrabber-ext-down 檔案
vi /usr/libexec/urlgrabber-ext-down
第一行改為#!/usr/bin/python2.7,然後按esc,輸入 :wq 退出即可
現在就完成了 python 環境的配置了。
3. 下載相關庫
為了方便管理,我這裡使用了虛擬環境,防止每個指令碼執行時所需要的庫進行衝突,如果你暫時沒有想那麼複雜,只是想執行一次指令碼而已,也可以不必要使用虛擬環境,不過還是建議使用虛擬環境的,畢竟始終都需要用到的。
1)下載 virtualenv 庫
這個是建立 虛擬環境使用的庫。
pip3 install virtualenv
注意:這裡使用的是 pip3,若是直接使用 pip 則對應的是 python2 版本的。
2)下載 virtualenvwrapper-win 庫
這個庫是為了方便管理虛擬環境使用的
pip3 install virtualenvwrapper-win
下載完了還需要配置環境變數
vim ~/.bashrc
在末尾新增上這兩句
export WORK_HOME=$HOME/.virtualenvssource /usr/local/python3/bin/virtualenvwrapper.sh
第一句是固定的,第二句為指定 virtualenvwrapper 安裝的路徑
啟用配置
source ~/.bashrc
然後進入你想建立虛擬環境的路徑,輸入以下命令
mkvirtualenv py3_test
建立成功之後會自動進入該虛擬環境
但是這裡預設使用的是 python2 版本指定的虛擬環境,需要使用 python3 版本可以指定版本建立
指定 python 版本建立虛擬環境
mkvirtualenv py3 --python=python
上面使用 --python 引數來指定 python 版本,因為 python 這個檔案是指向 python3 的,所以可以這樣使用,當然你也可以填上你 python3 版本的位置,這時虛擬環境的 python 版本就是 3 了。
3. 下載機器人相關庫
這裡就是在虛擬環境中使用 pip3 安裝 itchat 和 requests 庫(用於爬蟲獲取早報)即可
4. 上傳指令碼到伺服器
由於伺服器上原本就帶有 ftp 伺服器的,所以我們只需要在本地安裝個 fileZilla 客戶端進行連線即可,自己去官網下載即可。
這裡填上自己的伺服器 ip 地址和連線賬號和密碼 ,點選連線即可
連線成功之後,左邊就是我們伺服器上面的檔案了,右邊就是本地檔案,右擊需要上傳的檔案選擇上傳即可。上傳成功之後即可在伺服器上看到相關檔案。
接下來就是執行指令碼了。
5. 在伺服器上執行指令碼
可以直接像在本地一樣執行指令碼
python robot.py
這樣就可以 執行成功了,但是我們在關閉連線之後,這個指令碼就停止了,那豈不是還是需要開著電腦掛機?
別急,我們可以在後臺執行指令碼啊,這樣即使關閉連線,也一樣在執行。使用命令如下:
nohup python robot.py
這時你可以檢視程序
ps -ef | grep python
就會看到我們剛才 robot 程式碼已經執行起來了,這個就是在後臺執行,關閉連線之後一樣會執行,這下就放心了。
但是,如果發生錯誤的話,我們是無法知道哪裡出錯的,這時我們指定日誌輸出檔案
nohup python -u robot.py > robot.log 2>&1 &
-u 就是指定實時的日誌輸出目錄,而 & 符號是使程式在後臺執行,一邊執行還可以一邊檢視日誌輸出檔案,這裡的 robot.log 就是我們的日誌輸出檔案。
還有一個問題,我想停止機器人怎麼辦?可以使用這個命令
kill PID
這裡 PID 為 linux 系統上的程序號,要想停止哪個後臺程式就填上它對應的 PID 即可,檢視 PID
ps -ef | grep python
箭頭所指就是 PID 了。
最後
由於我現在的知識水平有限,暫時只能說明這麼多,這些都是我當初在第一次使用時所做的記錄,如有錯誤,還請幫忙指出。同時還參考了幾篇文章:
最後碼字不易,如果對你有用的話,那就拍拍雙手點個「好看」吧,或者分享給你的朋友一起學習!