在很多時候,我們都會發(fā)現(xiàn)有一些指令或者服務,執(zhí)行后是一種持續(xù)監(jiān)控運行的狀態(tài),不能退出,該終端標簽頁也不能關(guān)閉。
創(chuàng)新互聯(lián)建站是一家專業(yè)從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計的品牌網(wǎng)絡公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)建站依托強大的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計開發(fā)服務!
這就帶來了很多不便,那么如何讓其在后臺持續(xù)運行,退出運行狀態(tài)和關(guān)閉終端標簽頁也不影響呢?
方法就是在該命令后面加? ? ?符號,即可。
示例
gocron的客戶端服務運行命令,./gocron web
圖2退出和關(guān)閉標簽頁后,圖三依然如此,服務也可以使用。
在linux系統(tǒng)中有這兩個命令 ctrl+z 和ctrl+c ,這兩個命令輸入之后看起來結(jié)果差不多,實質(zhì)是不同的。
他們都有中斷命令的效果,但是作用是不一樣的。
ctrl+c是強制終止程序的執(zhí)行并結(jié)束進程。而ctrl+z則只是中斷任務的執(zhí)行,但該任務并沒有被結(jié)束。
它只是在進程中維持掛起的狀態(tài),用戶可以使用fg/bg命令來繼續(xù)前臺/后臺執(zhí)行該任務。fg命令會重啟
前臺被中斷的任務,bg命令會把中斷的任務放到后臺執(zhí)行。
你也可以使用bg這樣的方法讓一個前臺執(zhí)行的任務切換到后臺去執(zhí)行。
也可以使用fg這樣的方法讓一個后臺執(zhí)行的任務切換到前臺去執(zhí)行。
還有一個最常用的方法是
在一行命令的最后輸入,可以讓這行命令放到后臺去運行。
使用jobs命令查看當前有多少后臺程序在運行。
一、
加在一個命令的最后,可以把這個命令放到后臺執(zhí)行,如:
[root@bqh-01 ~]# watch -n 3 "sh 1.sh " #每3s在后臺執(zhí)行一次 1.sh 腳本
二、ctrl + z
可以將一個正在前臺執(zhí)行的命令放到后臺,并且處于暫停狀態(tài)。
三、jobs
查看當前有多少在后臺運行的命令
jobs -l選項可顯示所有任務的PID,jobs的狀態(tài)可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環(huán)境已知的列表中刪除任務的進程標識。
將后臺中的命令調(diào)至 前臺 繼續(xù)運行。如果后臺中有多個命令,可以用fg %jobnumber(是命令編號,不是進程號)將選中的命令調(diào)出。
五、bg
將一個在后臺暫停的命令,變成在 后臺 繼續(xù)執(zhí)行。如果后臺中有多個命令,可以用bg %jobnumber將選中的命令調(diào)出。
六、kill
****
前臺進程的終止:Ctrl+c
****七、 nohup
如果讓程序始終在后臺執(zhí)行,即使關(guān)閉當前的終端也執(zhí)行(之前的做不到),這時候需要nohup。該命令可以在你退出帳戶/關(guān)閉終端之后繼續(xù)運行相應的進程。關(guān)閉中斷后,在另一個終端jobs已經(jīng)無法看到后臺跑得程序了,此時利用ps(進程查看命令)
pre style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"ps -aux | grep "1.sh" #a:顯示所有程序 u:以用戶為主的格式來顯示 x:顯示所有程序,不以終端機來區(qū)分/pre
第一種nohup命令來讓程序在后臺運行
括號內(nèi)容表示可以將平時輸出到控制臺中的內(nèi)容重定向到*.log這個文件中,這個是可選的,如果沒有這個,則會默認輸出到nohup.out文件中。括號后面你的表示后臺運行。
舉個例子:
第二種方法是寫一個腳本,假設(shè)我們定義了一個腳本run.sh
#!/bin/bash 是指此腳本使用/bin/bash來解釋執(zhí)行下面的語句,其中cd是表示將當前目錄跳到所要運行文件所在目錄,然后python3 文件名.py則表示運行***python文件,當寫完該腳本后,執(zhí)行以下命令來執(zhí)行該腳本從而讓程序在后臺運行。
通過 ps -ef|grep python3 命令可以查看后臺運行的進程都有哪些
1.nohup
用途:不掛斷地運行命令。
語法:nohup Command [ Arg … ] [ ]
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。
如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
如果沒有文件能創(chuàng)建或打開以用于追加,那么 Command 參數(shù)指定的命令不可調(diào)用。
退出狀態(tài):該命令返回下列出口值:
126 可以查找但不能調(diào)用 Command 參數(shù)指定的命令。
127 nohup 命令發(fā)生錯誤或不能查找由 Command 參數(shù)指定的命令。
否則,nohup 命令的退出狀態(tài)是 Command 參數(shù)指定命令的退出狀態(tài)。
2.
用途:在后臺運行
一般兩個一起用
nohup command
eg: nohup echo hello logs/hello.log 21
當我們在終端或控制臺工作時,可能不希望由于運行一個作業(yè)而占住了屏幕,因為可能還有更重要的事情要做,比如閱讀電子郵件。對于密集訪問磁盤的進程,我們更希望它能夠在每天的非負荷高峰時間段運行(例如凌晨)。為了使這些進程能夠在后臺運行,也就是說不在終端屏幕上運行,有幾種選擇方法可供使用。
:當在前臺運行某個作業(yè)時,終端被該作業(yè)占據(jù);可以在命令后面加上 實現(xiàn)后臺運行。例如:sh test.sh
適合在后臺運行的命令有f i n d、費時的排序及一些s h e l l腳本。在后臺運行作業(yè)時要當心:需要用戶交互的命令不要放在后臺執(zhí)行,因為這樣你的機器就會在那里傻等。不過,作業(yè)在后臺運行一樣會將結(jié)果輸出到屏幕上,干擾你的工作。如果放在后臺運行的作業(yè)會產(chǎn)生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:
這樣,所有的標準輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件中。
PS:當你成功地提交進程以后,就會顯示出一個進程號,可以用它來監(jiān)控該進程,或殺死它。(ps -ef | grep 進程號 或者 kill -9 進程號)
nohup:使用命令后,作業(yè)被提交到后臺運行,當前控制臺沒有被占用,但是一但把當前控制臺關(guān)掉(退出帳戶時),作業(yè)就會停止運行。nohup命令可以在你退出帳戶之后繼續(xù)運行相應的進程。nohup就是不掛起的意思( no hang up)。該命令的一般形式為:
如果使用nohup命令提交作業(yè),那么在缺省情況下該作業(yè)的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件:
使用了nohup之后,很多人就這樣不管了,其實這樣有可能在當前賬戶非正常退出或者結(jié)束的時候,命令還是自己結(jié)束了。所以在使用nohup命令后臺運行命令之后,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在后臺運行。
ctrl + z :可以將一個正在前臺執(zhí)行的命令放到后臺,并且處于暫停狀態(tài)。
Ctrl+c :終止前臺命令。
jobs: 查看當前有多少在后臺運行的命令。 jobs -l選項可顯示所有任務的PID,jobs的狀態(tài)可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環(huán)境已知的列表中刪除任務的進程標識。
21解析:
擴展鏈接:如何寫高效的代碼,和代碼優(yōu)化方法