當前位置:首頁 » 網頁前端 » 腳本後台執行nohup
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

腳本後台執行nohup

發布時間: 2023-01-23 03:01:56

㈠ shell腳本讓進程在後台運行以及進程後台轉前台

我們計算的程序都是周期很長的,通常要幾個小時甚至一個星期。我們用的環境是用 putty 遠程連接到日本 Linux 伺服器。所以使程序在後台跑有以下三個好處:

1:我們這邊是否關機不影響日本那邊的程序運行。(不會像以前那樣,我們這網路一斷開,或一關機,程序就斷掉或找不到數據,跑了幾天的程序只能重頭再來,很是煩惱)

2:不影響計算效率

3:讓程序在後台跑後,不會占據終端,我們可以用終端做別的事情。

方法有很多,這里主要列舉兩種。假如我們有程序 pso.cpp ,通過編譯後產生可執行文件 pso ,我們要使 pso 在 linux 伺服器後台執行。當客戶端關機後重新登入伺服器後繼續查看本來在終端輸出的運行結果。(假設操作都在當前目錄下)

方法1在終端輸入命令:

解釋:將 pso 直接放在後台運行,並把終端輸出存放在當前目錄下的 log.file 文件中。

當客戶端關機後重新登陸伺服器後,直接查看 pso.file 文件就可看執行結果(命令:$ cat pso.file )。
方法2在終端輸入命令:

解釋: nohup 就是不掛起的意思,將 pso 直接放在後台運行,並把終端輸出存放在當前

目錄下的 pso.file 文件中。當客戶端關機後重新登陸伺服器後,直接查看 pso.file

文件就可看執行結果(命令: #cat pso.file )。

註:如果要使在前天執行任務放到後台運行,則先要用 ctrl+z 掛起該任務,然後用 bg 使之後台執行。
附:
在 Linux 中,如果要讓進程在後台運行,一般情況下,我們在命令後面加上 & 即可,實際上,這樣是將命令放入到一個作業隊列中了:

對於已經在前台執行的命令,也可以重新放到後台執行,首先按 ctrl+z 暫停已經運行的進程,然後使用 bg 命令將停止的作業放到後台運行:

但是如上方到後台執行的進程,其父進程還是當前終端 shell 的進程,而一旦父進程退出,則會發送 hangup 信號給所有子進程,子進程收到 hangup 以後也會退出。如果我們要在退出 shell 的時候繼續運行進程,則需要使用 nohup 忽略 hangup 信號,或者 setsid 將將父進程設為 init 進程(進程號為 1 )

上面的試驗演示了使用 nohup/setsid 加上 & 使進程在後台運行,同時不受當前 shell 退出的影響。那麼對於已經在後台運行的進程,該怎麼辦呢?可以使用 disown 命令:

另外還有一種方法,即使將進程在一個 subshell 中執行,其實這和 setsid 異曲同工。方法很簡單,將命令用括弧() 括起來即可:

註:本文試驗環境為 Red Hat Enterprise Linux AS release 4 (Nahant Update 5) , shell 為 /bin/bash ,不同的 OS 和 shell 可能命令有些不一樣。例如 AIX 的 ksh ,沒有 disown ,但是可以使用 nohup -p PID 來獲得 disown 同樣的效果。

還有一種更加強大的方式是使用 screen ,首先創建一個斷開模式的虛擬終端,然後用 -r 選項重新連接這個虛擬終端,在其中執行的任何命令,都能達到 nohup 的效果,這在有多個命令需要在後台連續執行的時候比較方便:

㈡ 每天三分鍾搞定linux shell腳本24 後台模式運行

當運行腳本的時候在最後加上符號 & ,則對應的腳本在 後台運行 。建立腳本為,

輸入 ./test.sh & 運行

運行後1.txt文件會不斷增加內容,但是腳本以後台運行不會在終端佔用。運行結果為:

輸入 jobs 可以看到這個後台進程:

這個時候如果輸入exit,不會提示有後台進程在運行,而且後台進程也會退出。因為終端會話退出的時候會給這個後台進程發送一個 SIGHUP信號 。如果想要終端退出之後,進程不退出,可以讓進程捕獲SIGHUP信號。當然還有另一個方法,使用 nohup 指令運行腳本,比如輸入:

當用 nohup 並使用後台模式運行之後,即使退出終端,進程也不會收到SIGHUP信號。並且nohup會自動把標准輸出和標准錯誤重定向到nohup.out的文件中。

一個 運行的進程或者暫停的進程 都是一個作業,使用 jobs 命令可以查看當前的作業狀態。輸入:

我當前的輸出為:

(上面的作業2是輸入 ctrl+z 後暫停的進程)

其中, + 號被當作是默認作業,每個作業的前面有自己的序號。如果後續操作不加序號,那麼就被當做是在操作默認作業。比如使用 fg 指令前台運行作業,就是把27652這個進程前台運行,如果輸入 fg 1 ,那麼就是操作作業 1 了。帶-號的表示下一個默認作業。

輸入 bg 1 把 1號作業 後台運行,輸入 fg 2 把 2號作業 前台運行。

㈢ Python後台運行—nohup

應用場景:
docker run -it --restart=always 188e54ba227d /sh/start.sh
docker自啟動腳本文件中需要後台執行python文件
nohup python3 -u face.py >> /var/www/html/faceAlgorithm/my.log 2>&1 &
加-u可以看到所有輸出
tail -f /var/www/html/faceAlgorithm/my.log
參考:
https://blog.csdn.net/weixin_42840933/article/details/85780125

㈣ linux後台自動執行命令nohup與日誌查看

在linux上執行腳本,當退出頁面或電腦鎖屏後,腳本就停止執行了。對需要長時間運行的腳本非常不友好。

nohup(no hang up):可以讓程序不掛斷執行。
& :可以讓程序在後台執行。

「> nohup.log」: 表示將日誌輸出到nohup.log文件上。
2>&1:表示將正確日誌、錯誤日誌都輸出到正確日誌指定的文件(nohup.log文件)上。

㈤ nohup 詳解 Python不掛斷運行後台程序

原文鏈接

回到頂部

nohup 命令運行由 Command參數和任何相關的 Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用 nohup 命令運行後台中的程序。要運行後台中的 nohup 命令,添加 & ( 表示「and」的符號)到命令的尾部。

nohup 是 no hang up 的縮寫,就是不掛斷的意思。

nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。

在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中。

回到頂部

在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;

2>&1是將標准錯誤(2)重定向到標准輸出(&1),標准輸出(&1)再被重定向輸入到myout.file文件中。

這是放在crontab中的定時任務,晚上22點時候怕這個任務,啟動這個python的腳本,並把日誌寫在download_dfcf_pdf_to_oss.log文件中

回到頂部

& : 指在後台運行

nohup : 不掛斷的運行,注意並沒有後台運行的功能,,就是指,用nohup運行命令可以使命令永久的執行下去,和用戶終端沒有關系,例如我們斷開SSH連接都不會影響他的運行,注意了nohup沒有後台運行的意思;&才是後台運行

&是指在後台運行,但當用戶推出(掛起)的時候,命令自動也跟著退出

那麼,我們可以巧妙的吧他們結合起來用就是
nohup COMMAND &
這樣就能使命令永久的在後台執行

例如:

1. sh test.sh &
將sh test.sh任務放到後台 ,即使關閉xshell退出當前session依然繼續運行,但 標准輸出和標准錯誤信息會丟失(缺少的日誌的輸出)

將sh test.sh任務放到後台 ,關閉xshell,對應的任務也跟著停止。
2. nohup sh test.sh
將sh test.sh任務放到後台,關閉標准輸入, 終端不再能夠接收任何輸入(標准輸入) ,重定向標准輸出和標准錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。
3. nohup sh test.sh &
將sh test.sh任務放到後台,但是依然可以使用標准輸入, 終端能夠接收任何輸入 ,重定向標准輸出和標准錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。

回到頂部

https://blog.csdn.net/u011095110/article/details/78666833

https://ke..com/item/nohup/5683841

㈥ linux後台執行命令:&和nohup的用法,確實很實用

當我們在終端或控制台工作時,可能不希望由於運行一個作業而佔住了屏幕,因為可能還有更重要的事情要做,比如閱讀電子郵件。對於密集訪問磁碟的進程,我們更希望它能夠在每天的非負荷高峰時間段運行(例如凌晨)。為了使這些進程能夠在後台運行,也就是說不在終端屏幕上運行,有幾種選擇方法可供使用。

& :當在前台運行某個作業時,終端被該作業占據;可以在命令後面加上& 實現後台運行。例如:sh test.sh &

適合在後台運行的命令有f i n d、費時的排序及一些s h e l l腳本。在後台運行作業時要當心:需要用戶交互的命令不要放在後台執行,因為這樣你的機器就會在那裡傻等。不過,作業在後台運行一樣會將結果輸出到屏幕上,干擾你的工作。如果放在後台運行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:

這樣,所有的標准輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件中。

PS:當你成功地提交進程以後,就會顯示出一個進程號,可以用它來監控該進程,或殺死它。(ps -ef | grep 進程號 或者 kill -9 進程號)

nohup:使用&命令後,作業被提交到後台運行,當前控制台沒有被佔用,但是一但把當前控制台關掉(退出帳戶時),作業就會停止運行。nohup命令可以在你退出帳戶之後繼續運行相應的進程。nohup就是不掛起的意思( no hang up)。該命令的一般形式為:

如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件:

使用了nohup之後,很多人就這樣不管了,其實這樣有可能在當前賬戶非正常退出或者結束的時候,命令還是自己結束了。所以在使用nohup命令後台運行命令之後,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在後台運行。

ctrl + z :可以將一個正在前台執行的命令放到後台,並且處於暫停狀態。

Ctrl+c :終止前台命令。

jobs: 查看當前有多少在後台運行的命令。 jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。

2>&1解析:

擴展鏈接:如何寫高效的代碼,和代碼優化方法

㈦ Lunix運行腳本、任務(sh、nohup、qsub)

產生日誌:

sh **.sh &> xx.log

不產生日誌:

sh **.sh > /dev/null 2>&1 &

nohup:no hang up 的縮寫,就是不掛斷的意思 。 

nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。 該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。 在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中。

使用許可權:所有使用者

語法格式

nohup Command [ Arg … ] [& ]

參數說明:

Command :要執行的命令。

Arg :一些參數,可以指定輸出文件。

& :讓命令在後台執行,終端退出後命令仍舊執行。

實例

以下命令在後台執行 root 目錄下的 runoob.sh 腳本:

nohup /root/runoob.sh &

在終端如果看到以下輸出說明運行成功:

appending output to nohup.out

這時我們打開 root 目錄 可以看到生成了 nohup.out 文件。

如果要停止運行,你需要使用以下命令查找到 nohup 運行腳本到 PID,然後使用 kill 命令來刪除:

ps -aux | grep "runoob.sh"

參數說明:

a  : 顯示所有程序

u  : 以用戶為主的格式來顯示

x  : 顯示所有程序,不區分終端機

另外也可以使用 ps -def | grep "runoob.sh" 命令來查找。

找到 PID 後,就可以使用 kill PID 來刪除。

kill -9  進程號PID

以下命令在後台執行 root 目錄下的 runoob.sh 腳本,並重定向輸入到 runoob.log 文件:

nohup /root/runoob.sh > runoob.log 2>&1 &

2>&1  解釋:將標准錯誤 2 重定向到標准輸出 &1 ,標准輸出 &1 再被重定向輸入到 runoob.log 文件中。

0 – stdin (standard input,標准輸入)

1 – stdout (standard output,標准輸出)

2 – stderr (standard error,標准錯誤輸出)

實時監測日誌輸出內容命令:tail

tail 命令是nohup命令的好搭檔。配合-f參數,可以實時監視向日誌文件增加的信息。

tail -f myout.log

tail -f 等同於–follow=descriptor,根據文件描述符進行追蹤,當文件改名或被刪除,追蹤停止

tail -F 等同於–follow=name --retry,根據文件名進行追蹤,並保持重試,即該文件被刪除或改名後,如果再次創建相同的文件名,會繼續追蹤

tailf 等同於tail -f -n 10,與tail -f不同的是,如果文件不增長,它不會去訪問磁碟文件,所以tailf特別適合那些便攜機上跟蹤日誌文件,因為它減少了磁碟訪問,可以省電。

監測程序是否在正常運行中:ps

ps命令也可以和nohup命令配合使用,用於顯示當前進程 (process) 的狀態。可以監視後台程序是否在正常運行中或者已經掛掉。

ps -ef|grep yourcommand           # -ef 參數顯示所有命令,連帶啟動時的命令行參數

qsub命令用來從登陸節點上向計算節點進行任務投遞。前提是在伺服器上有集群管理工具分配計算節點等。SGE(SGE, Sun Grid Engine)集群管理工具可以用來提交批處理作業,SGE支持單或多節點作業,它將用戶投遞的任務進行排隊,然後將任務交給能夠運行的結算節點執行,工作流程可以分為四步:接受用戶投放的任務;在任務運行以前,將任務放到一個存儲區域;發送任務到一個執行設備,並監控任務的運行;運行結束寫回結果並記錄運行日誌。

qsub [ options ] [ command | -- [ command_args ]]

1. -@ optionfile (contains all valid options)  就是把qsub命令的可選項組合成一定功能的語句,保存在一個文件中。  qsub -a optionfilename jobfilename  

2. -a date_time   設置作業什麼時候可以執行。   格式:CC YY MMDDHHMM.SS 如 201109272213.21   qsub -a 201109272213.21 ../simplejob

3. -A account_string  Identifies the account to which the resource consumption of the job should be charged   設置一個作業的賬戶名,便於統計該賬戶使用的資源等信息    qsub -A testaccountname jobname  

4. -ac 添加名/值對到作業上下文   -dc 刪除。。   -sc 設置(修改)。。   Contexts provide a way to dynamically attach and remove meta-     information to and from a job. The context variables are not     passed to the job's execution context in its environment     The outcome of the evaluation of all -ac, -dc, and -sc options     or corresponding values in qmon is passed to defined JSV     instances as parameter with the name -ac.  

5. -ar ar_id 分配已提交作業,作為它的一部分,給已存在預約。ar=advance reservation   qsub -ar 60 jobname   #ai_di = unsigned integer   

6.  -b y[es]|n[o]      Gives the user the possibility to indicate explicitly whether       command should be treated as binary or script.     

7. -binding 等待理解

8.  -c occasion_specifier(際符)  定義或者重定義作業是否要被檢查,if是,在什麼環境下。        n           no checkpoint is performed.               s           checkpoint when batch server is shut down.               m           checkpoint at minimum CPU interval.               x           checkpoint when job gets suspended.               <interval>  checkpoint in the specified time interval.   qsub -c n jobname

9. -C prefix_string 前綴字元串定義一個在作業命令中的指令     qsub -C "#$" ../simplejob   

10.  -ckpt ckpt_name 選擇檢查點環境來檢查一個作業,同時聲明這個作業是檢查點作業。      qsub -ckpt allanckpt ../simplejob    

11.  -clear 重置作業的所有元素為初始默認狀態    qsub -clear ../simplejob   

12.  -cwd =current working directory  從當前的目錄開始執行作業。如果有相應的配置文件的話,    這個命令將啟動網格引擎的路徑別名設備。    

13.  -dl date_time 設置作業在deadline之前執行完,格式為CC YYU MMDDHHMM.SS    qsub -dl 201101131159.01 ../simplejob

14.  -e [[hostname]:]path,...定義或重新定義作業的標准錯誤流使用的路徑 e=stderror

15.  -h | -h {u|s|o|n|U|O|S}... h=hold 暫停作業執行       'u' .........user hold.             `s'  denotes a system hold.               `o'  denotes a operator hold.               `n'  denotes no hold (requires manager privileges).               `U'  removes a user hold.               `S'  removes a system hold.               `O'  removes a operator hold.        qsub -h ../simplejob(qsub只能使用-h)

16.  -l resource=value,... l=launch 啟動滿足資源需求的作業    Launch the job in a Grid Engine queue meeting the given resource               request list.  In case of qalter the previous definition is               replaced by the specified one.    qsub -l s_core=5 ../simplejob

17.  -q wc_queue_list 定義或重定義可能用來執行作業的隊列,包括群聚隊列、隊列域、隊列實例。    qsub -q all.q ../simplejob

18.  -hard  表示該作業在安排執行之前,作業的資源需求必須滿足。    qsub -hard  ../simplejob

19.  -soft 表示該作業在安排執行之前,作業的資料需求可以有、但不必須有。    qsub -soft ../simplejob

20.  -help 獲取幫助    qsub -help

21.  -hold_jid   wc_job_listt 定義或重定義當前提交的作業對哪些作業有依賴,所依賴的作業使用通配符作業清單表示:wc_job_list    qsub -hold_jid 63926 ../simplejob

22.  -hold_jid_ad wc_job_list ad=array dependency list of the submitted job    定義或者重定義組作業依賴列表。    qsub -hold_jid_ad 1-1200

23.  -t n[-m[:s]]    指定組作業的數量,將指示器與作業關聯    qsub -t 1-1200 ../simplejob

24.  -i [[hostname]:]file,... 定義或重定義一個文件為作業的標准輸入流    qsub -i stdin job

25.  -j y[es]|n[o] 指定作業的標准錯誤流是否合並到標准輸出流,如果-j y 和-e都存在的話,SGE將忽略後者。    qsub -j y ../simplejob

qstat -f # 查看用戶任務

qstat -j jobId  # 按任務id查看

qstat -explain a|c|A|E -j jobID # 查看任務任務並給出解釋

qstat -u user  # 按用戶查看

qw: 表示等待狀態

hqw: 任務掛起等待中,待依賴的任務完成後執行

Eqw: 投遞任務出錯

r: 表示任務正在運行

s: 暫時掛起

dr: 節點掛了之後,刪除任務就會出現這個狀態,只有節點重啟之後,任務才會消失

qdel -j 1111  刪除任務號為1111的任務

qdel -u AAA  刪除AAA投遞的所有任務

歡迎大家交流心得~~~3QU!!!...........

---------------------------------------------------------------------------------------------------------I am a line !----------------------------------------------------------------------------------------------

㈧ centos後台運行程序(nohup+screen)

linux系統經常需要程序在後台運行,程序不隨著會話的關閉或用戶的退出而關閉。

有兩種常用的後台運行程序的方式: nohup 和 screen 。

當前操作系統環境: centos7

(1)後台不掛起執行xxx.sh。標准輸出、錯誤輸出,輸出到xxx.out文件

此種情況,程序會再後台執行, 退出用戶 或關閉客戶終端,不影響程序運行。如想關閉程序,可通過 kill 命令關閉。

(2)後台不掛起執行xxx.sh。標准輸出、錯誤輸出,均不輸出

(1)輸入輸出重定向

linux環境下以下數字代表不同的含義:

默認情況下,標准輸出、標准錯誤, 均會輸出到控制台 。

默認所有的輸出都是「標准輸出」,除非將輸出重定向到「標准錯誤」,才會出現「標准錯誤」輸出

如 echo 'error msg' > &2 ,代表將輸出結果 error msg 由 標准輸出 重定向輸出到 標准錯誤 中。

輸出執行結果時,默認重定向的是標准輸出的信息,如下,執行結果是一樣的:

為什麼錯誤輸出到標准輸出,寫作 2>&1, 而不是寫作 2>1 ?

因為: 2>1 表示將「標准錯誤」輸出到文件 1 中,這里的 1 代表的是文件「1」,而不是標准輸出。需寫成 &1 ,表示為標准輸出。

(2)&(後台執行)

命令 末尾 的 & 代表程序後台執行,執行完成後,仍然會將輸出結果輸出到指定的輸出目標。

如只是簡單在執行命令後加上&,程序每次執行輸出, 仍然會將程序輸出到控制台 (並不是全部執行完後才輸出)。如下:

(3)nohup(不掛起)

使程序運行時不掛起, 不向 tty 輸出信息。nohup 只是不將程序輸出到前台,並不是完全在後台運行脫離當天會話,如果關閉會話,當前程序仍然會關閉。

常結合末尾的 & 一起使用。

如命令末尾不加上 & ,則當前會話窗口會等待運行的程序運行完畢,才可執行其他命令,如下:

上述命令,為執行test.sh(腳本見 9 測試腳本 ),並將 標准輸出 重定向到 out.log 文件,標准錯誤重定向到 error.log 文件。

生成的日誌文件如下:

screen(窗口管理器)可以創建後台會話窗口。退出當前會話後,後台會話窗口仍而在運行,可以隨意切換到後台窗口中。

以下命令查看官方文檔:

[root@w001 zhang]# screen -help
Use: screen [-opts] [cmd [args]]
or: screen -r [host.tty]

Options:
-4 Resolve hostnames only to IPv4 addresses.解析主機名為IPv4地址。
-6 Resolve hostnames only to IPv6 addresses.解析主機名到IPv6地址。
-a Force all capabilities into each window's termcap.強制所有功能進入每個窗口的termcap。
-A -[r|R] Adapt all windows to the new display width & height.使所有窗口適應新的顯示寬度和高度。
-c file Read configuration file instead of '.screenrc'.文件讀取配置文件,而不是'.screenrc'。
-d (-r) Detach the elsewhere running screen (and reattach here).斷開其他正在運行的屏幕(並在此重新連接)。
-dmS name Start as daemon: Screen session in detached mode.名稱啟動作為守護進程:屏幕會話在分離模式。
-D (-r) Detach and logout remote (and reattach here).斷開和注銷遠程(並在此重新連接)。
-D -RR Do whatever is needed to get a screen session.執行獲取屏幕會話所需的所有操作。
-e xy Change command characters.修改命令字元
-f Flow control on, -fn = off, -fa = auto.流量控制on, -fn = off, -fa = auto。
-h lines Set the size of the scrollback history buffer.設置滾動歷史緩沖區的大小。
-i Interrupt output sooner when flow control is on.當流控制打開時,中斷輸出的速度更快。
-l Login mode on (update /var/run/utmp), -ln = off.登錄模式on (update /var/run/utmp), -ln = off。
-ls [match] or -list Do nothing, just list our SockDir [on possible matches].什麼都不做,只是列出我們的SockDir[可能的匹配]。
-L Turn on output logging.打開輸出日誌記錄。
-m ignore STY變數,創建一個新的屏幕會話。
-O Choose optimal output rather than exact vt100 emulation.選擇最優輸出,而不是精確的vt100模擬。
-p window Preselect the named window if it exists.窗口預選命名窗口,如果它存在。
-q Quiet startup. Exits with non-zero return code if unsuccessful.安靜的啟動。如果不成功,則使用非零返回碼退出。
-Q Commands will send the response to the stdout of the querying process.命令將響應發送到查詢過程的stdout。
-r [session] Reattach to a detached screen process.重新連接到一個分離的屏幕進程。
-R Reattach if possible, otherwise start a new session.如果可能,重新連接,否則啟動一個新會話。
-s shell Shell to execute rather than shell。
-S sockname Name this session <pid>.sockname instead of <pid>.<tty>.<host>. 將此會話命名為。sockname而不是<pid>.<tty>.<host>。
-t title Set title. (window's name).標題設置標題。(窗口的名字)。
-T term Use term as term用於windows,而不是「screen」。
-U Tell screen to use UTF-8 encoding.告訴screen使用UTF-8編碼。
-v Print "Screen version 4.01.00devel (GNU) 2-May-06".列印"屏幕版本4.01.00devel (GNU) 2-May-06"。
-wipe [match] Do nothing, just clean up SockDir [on possible matches].什麼都不做,只是清理SockDir[可能的匹配]。
-x Attach to a not detached screen. (Multi display mode).連接到未分離的屏幕。(多顯示模式)。
-X Execute <cmd> as a screen command in the specified session.在指定會話中執行作為屏幕命令。

㈨ linux 遠程主機後台運行任務 掛起腳本

背景 :工作需要,需要遠程式控制制主機使其斷開Xshell後也能一直運行。
關鍵字 :& ,nohup,腳本掛起。

在應用Unix/Linux時,我們一般想讓某個程序在後台運行,於是我們將常會用 & 在程序結尾來讓程序自動運行。

鍵入Ctrl + C,發出SIGINT信號,程序會繼續運行

方法一、輸入命令:jobs

方法二:輸入命令:ps

fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令

加在一個命令的最後,可以把這個命令放到後台執行,如

可以將一個正在前台執行的命令放到後台,並且處於暫停狀態。

查看當前有多少在後台運行的命令
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。

將後台中的命令調至前台繼續運行。如果後台中有多個命令,可以用fg %jobnumber(是命令編號,不是進程號)將選中的命令調出。

將一個在後台暫停的命令,變成在後台繼續執行。如果後台中有多個命令,可以用bg %jobnumber將選中的命令調出。

法子1:通過jobs命令查看job號(假設為num),然後執行kill %num
法子2:通過ps命令查看job的進程號(PID,假設為pid),然後執行kill pid
前台進程的終止:Ctrl+c

如果讓程序始終在後台執行,即使關閉當前的終端也執行(之前的&做不到),這時候需要nohup。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。
關閉中斷後,在另一個終端jobs已經無法看到後台跑得程序了,此時利用ps(進程查看命令)

如上所示:
nohup 和 & 組合了後台運行程序。
可以輸出到 out.log保存程序輸出,也可以輸出到/dev/null 即空設備,不保存輸出。

上面三種方式無論在nohup.out 或test.out都看不到數據結果,這是因為python執行有緩存輸出
解決

新的介面接入查看程序

使用&後台運行程序:

結果會輸出到終端
使用Ctrl + C發送SIGINT信號, 程序免疫
關閉session發送SIGHUP信號, 程序關閉

使用nohup運行程序:

結果默認會輸出到nohup.out
使用Ctrl + C發送SIGINT信號, 程序關閉
關閉session發送SIGHUP信號, 程序免疫
平日線上經常使用nohup和&配合來啟動程序:
同時免疫SIGINT和SIGHUP信號

同時,還有一個最佳實踐:
不要將信息輸出到終端標准輸出,標准錯誤輸出,而要用日誌組件將信息記錄到日誌里
nohup和&究竟有啥區別

㈩ shell腳本後台運行

使用nohup,其中sample.sh為所執行的腳本,out.log為日誌輸出文件。
nohup sh sample.sh>out.log &

使用sh,其中sample.sh為所執行的腳本,out.log為日誌輸出文件。
sh sample.sh>&out.log &

& 放在啟動參數後面表示設置此進程為後台進程