【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)