linux 启动/关闭多个py脚本
后臺(tái)運(yùn)行腳本
需求:很多時(shí)候我們會(huì)在 linux 服務(wù)器上執(zhí)行 python 腳本,然而腳本程序執(zhí)行的時(shí)間可能比較長(zhǎng),當(dāng)耗時(shí)過(guò)長(zhǎng)的情況下,我們使用 ssh 遠(yuǎn)程登錄到 linux 服務(wù)器上容易造成超時(shí)自動(dòng)斷開(kāi)連接,當(dāng)用戶注銷(xiāo)時(shí),終端會(huì)收到 hup(hangup)信號(hào)從而關(guān)閉其所有子進(jìn)程,會(huì)導(dǎo)致正在執(zhí)行中的 python 腳本被中斷,為了解決這一問(wèn)題,我們使用 nohup 命令并結(jié)合 & 解決此問(wèn)題。
命令格式:nohup command &
nohup 指:在忽略掛起信號(hào)的情況下運(yùn)行給定的命令,以便在注銷(xiāo)后命令可以在后臺(tái)繼續(xù)運(yùn)行;nohup 并不支持后臺(tái)運(yùn)行,它是忽略內(nèi)部的掛斷信號(hào),不掛斷運(yùn)行
& 指:后臺(tái)運(yùn)行,即將進(jìn)程放到后臺(tái)運(yùn)行,這里的后臺(tái),其實(shí)指的是當(dāng)前登陸終端的后臺(tái),如果在命令尚未執(zhí)行完畢時(shí)就退出登陸,則此命令的執(zhí)行會(huì)被中斷。
那么,如果將 nohup 與 & 結(jié)合在一起使用,這樣就可以不掛斷的永久在后臺(tái)執(zhí)行。
命令示例:(將 test.py 輸出的內(nèi)容寫(xiě)入到 test.out 文件中)nohup python -u test.py 參數(shù)1 參數(shù)2 參數(shù)3 > test.out 2>&1 &
其中 “2>&1” 表示:將錯(cuò)誤和輸出都傳到 test.out 文件中,默認(rèn)狀態(tài)只把輸出輸出到文件中
如果去掉末尾的 ‘&’ ,則表示此命令會(huì)在終端前臺(tái)工作,所有輸出的內(nèi)容會(huì)寫(xiě)入到 test.out 文件。
實(shí)時(shí)查看 test.py 輸出的內(nèi)容:tail -f -n 20 test.out
啟動(dòng)腳本
例如我要同時(shí)運(yùn)行多個(gè)python腳本,可以這么創(chuàng)建一個(gè)start.sh
#!/bin/bash cd ./middle_back_end/backend/ nohup python -u backend_today.py >/home/hanhan/InternShipProject/out/today.out 2>&1 & nohup python -u backend_yestoday.py >/home/hanhan/InternShipProject/out/yestoday.out 2>&1 & nohup python -u backend_getnums.py >/home/hanhan/InternShipProject/out/getnums.out 2>&1 & cd /home/hanhan/InternShipProject/front_middle_end/backend/ nohup python -u backend.py >/home/hanhan/InternShipProject/out/flask.out 2>&1 &然后在sh文件目錄下,通過(guò)命令sh start.sh運(yùn)行腳本。然后我們看看是否運(yùn)行成功:
運(yùn)行命令ps -ef | grep backend(因?yàn)槲疫@邊腳本名字中都有backend這個(gè)字眼),可以看到確實(shí)都在運(yùn)行
關(guān)閉腳本
將剛剛創(chuàng)建的幾個(gè)進(jìn)程一次性kill掉,創(chuàng)建stop.sh
#!/bin/sh ps -ef |grep backend | grep -v grep | awk '{print $2}' | xargs kill -9第一段前面兩節(jié)不陌生,是查找某個(gè)進(jìn)程,第三節(jié)的意思是過(guò)濾grep(一般調(diào)用前兩節(jié)命令后顯示的有兩段數(shù)據(jù),過(guò)濾的就是第二段無(wú)用的數(shù)據(jù)),第四節(jié)的意思是找出進(jìn)程號(hào)
$2:表示第二個(gè)字段
print $2 : 打印第二個(gè)字段,第五節(jié)的意思是殺死找出的進(jìn)程號(hào).
然后在sh文件目錄下,通過(guò)命令sh stop.sh運(yùn)行腳本。
最后再通過(guò)ps -ef |grep backend命令觀察,發(fā)現(xiàn)kill成功。
參考
Linux 自動(dòng)關(guān)閉某個(gè)進(jìn)程腳本
nohup運(yùn)行python腳本_linux 下 Python 腳本后臺(tái)執(zhí)行(nohup command &)
Linux中執(zhí)行shell腳本的4種方法總結(jié)
總結(jié)
以上是生活随笔為你收集整理的linux 启动/关闭多个py脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大老婆的反击剧情介绍
- 下一篇: py脚本:linux系统下定时清理文件