1. 程式人生 > 其它 >【Linux】Linux後臺任務(nohup、screen)

【Linux】Linux後臺任務(nohup、screen)

一、nohup

nohup npm start &

加’&’表示將程序丟到後臺,但是當退出該終端時很有可能這個指令碼也會退出,而在前面加上’nohup’就沒有問題了。nohup的作用就是不掛斷地執行命令。

如果標準輸出是一個終端,儘可能將輸出新增到"nohup.out",
否則新增到"$HOME/nohup.out"。
如果標準錯誤輸出是一個終端,重定向它到標準輸出。
要儲存輸出內容到一個檔案,使用 “nohup COMMAND > FILE” 形式的命令。

 檢視日誌:

tail -f nohup.out

但使用非root賬號啟動也會在退出該終端時服務停止。

二、screen

screen狀態有四種:

1.Attached 目前正在工作當中,當使用Ctrl+a+d就會退出工作狀態,狀態就會變Detached,但是還是後臺工作
2.Datached 在後臺工作當中,也可以在Attached狀態時使用命令screen -r 1000讓其變成Datached狀態
3.Dead ??? 死亡狀態,這個需要用的命令是kill -9 3000,如果已經是Dead狀態,用這命令是會報錯的,只能去殺前兩種狀態的screen程序
4.Removed 當使用screen -wipe刪掉某個screen程序的時候顯示 

screen 命令的的用法: 

screen常用引數:

 -A  將所有的視窗都調整為目前終端機的大小。
 -d <作業名稱>  將指定的screen作業離線。
 -h <行數>  指定視窗的緩衝區行數。
 -m  即使目前已在作業中的screen作業,仍強制建立新的screen作業。
 -r <作業名稱>  恢復離線的screen作業。
 -R  先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
 -s <shell>  指定建立新視窗時,所要執行的shell。
 -S <作業名稱>  指定screen作業的名稱。
 -v  顯示版本資訊。
 -x  恢復正在工作的screen作業。
 -ls或--list  顯示目前所有的screen作業。
 -wipe  檢查目前所有的screen作業,並刪除已經無法使用的screen作業

下面對引數做出一些說明:

1.screen 執行screen命令後會自動開啟一個新shell,在這個新的shell裡可以執行任何命令。一般只開一個。可以想象成上網一般只用開一個瀏覽器。新建bash,最多可建10個。每一個bash都可以單獨瀏覽和工作。可以想象成瀏覽器的標籤。

crtl+A+數字[0-9] #直接跳到第n個bash
ctrl+A+A #bash之間快速切換

2.exit 退出screen(記得你退出的是bash還是screen)

3.如果一個程序很重要,不想在退出終端的時候中斷,可以按ctrl+a+d (先ctrl+a 後按d就可以),也就是在此時(關閉終端的時候),screen遮蔽掉了父目錄傳送的signhup命令。程序由Attached狀態變成Datached

4.screen -r 列出進入Datached狀態的screen

5.screen -r pid 恢復對應的程序

6.screen -S hehe 程序裡就會看到這個screen被標為 hehe.ttyn.host,而不是程序ID。類似於備註提示

7.screen -d pid將Attached狀態的screen變成Datached(同ctrl+a+d)

參考:https://blog.51cto.com/fengtao/1287163