1. 問題引入
通過(guò)Xshell工具連接遠(yuǎn)程阿里云服務(wù)器后,如何運(yùn)行python程序呢?這個(gè)大家都知道,python命令啦。
舉個(gè)栗子:通過(guò)Xshell在某個(gè)目錄下輸入命令:python test.py就執(zhí)行了test.py這個(gè)程序。
但是如果我這個(gè)test.py要運(yùn)行好久呢?比如運(yùn)行好幾天,難道要一直開著Xshell工具,開著本地電腦嗎?有沒有關(guān)掉Xshell連接服務(wù)器上的程序依舊運(yùn)行的方法呢?
當(dāng)然有啦~
2. 正文
本文就是來(lái)講一下如何后臺(tái)運(yùn)行python程序的。
關(guān)鍵的命令:nohup
只需要輸入下面的命令就可以在后臺(tái)一直執(zhí)行python程序啦
nohup python -u test.py > test.log 2>&1 &
這條命令的意思是,執(zhí)行test.py程序,并把程序中執(zhí)行的情況記錄到test.log文件中,包括程序異常、程序中打印的信息等。
PS: 也可以把上述命令寫成nohup python -u test.py > nohup.out 2>&1 &唯一的區(qū)別就是把日志信息寫到nohup.out文件中去了,兩種做法都行。
輸入后,回車。會(huì)打印出一個(gè)進(jìn)程號(hào)(我這里是4935)。
通過(guò)ps -A命令查看當(dāng)前運(yùn)行的所有進(jìn)程。你就會(huì)發(fā)現(xiàn)剛才生成的進(jìn)程號(hào)在列出的進(jìn)程里面啦。
關(guān)掉Xshell,重新連接,再次ps -A命令查看當(dāng)前運(yùn)行的所有進(jìn)程,哈哈,剛才的那個(gè)進(jìn)程號(hào)還在。說(shuō)明test.py程序還在執(zhí)行。。。
3. 應(yīng)用場(chǎng)景
這個(gè)方法有沒有用呢?當(dāng)然有用啦?。∮锰幋蟠蟮?!
比如,我在處理一個(gè)220M的文txt文件,需要對(duì)其中的所有字符進(jìn)行替換操作,在本地運(yùn)行的話,運(yùn)行3天也運(yùn)行不完,總不能一直開著我的筆記本吧。買了個(gè)阿里云服務(wù)器閑著也是閑著,用這個(gè)方法就可以在服務(wù)器上一直運(yùn)行啦~
再比如,前一段寫爬蟲,也是這種情況。爬時(shí)光網(wǎng)所有短評(píng),長(zhǎng)評(píng),用scrapy框架寫的,運(yùn)行在本地的話要運(yùn)行幾天,不知道要多久。這時(shí)候又可以放到阿里云服務(wù)器運(yùn)行了~
這里稍微記錄一下如何在遠(yuǎn)程服務(wù)器端后臺(tái)運(yùn)行scrapy爬蟲程序:
我們都知道,在本地運(yùn)行scrapy程序只需要命令scrapy crawal myspider,那么在服務(wù)器端,如何運(yùn)用上述后臺(tái)運(yùn)行python文件的方法來(lái)運(yùn)行scrapy程序呢?
簡(jiǎn)單!再寫一個(gè)python文件,如run.py,內(nèi)容如下:
import os
if __name__ == '__main__':
os.system("scrapy crawl myspider")
然后執(zhí)行:nohup python -u run.py > run.log 2>&1 &
很顯然了,就是在python文件中調(diào)用系統(tǒng)命令,運(yùn)行scrapy crawl myspider這條命令啦。通過(guò)后臺(tái)運(yùn)行這個(gè)run.py文件,來(lái)執(zhí)行scrapy crawl myspider這條命令,從而達(dá)到后臺(tái)運(yùn)行scrapy爬蟲程序的目的。