linux後臺運行的方法

nohup node ***.js &

這種方法可以,但存在你無法查詢日誌等問題

 

在SSH裏另一個有效的方法是screen命令。

 

【轉】http://www.9usb.net/201002/linux-screen-mingling.html

作爲linux服務器管理員,經常要使用ssh登陸到遠程linux機器上做一些耗時的操作。
也許你遇到過使用telnet或SSH遠程登錄linux,運行一些程序。如果這些程序需要運行很長時間(幾個小時),而程序運行過程中出現網絡故障,或者客戶機故障,這時候客戶機與遠程服務器的鏈接將終端,並且遠程服務器沒有正常結束的命令將被迫終止。
又比如你SSH到主機上後,開始批量的scp命令,如果這個ssh線程斷線了,scp進程就中斷了。在遠程服務器上正在運行某些耗時的作業,但是工作還沒做完快要下班了,退出的話就會中斷操作了,如何纔好呢?
我們利用screen命令可以很好的解決這個問題。實現在斷開SSH的情況下,在服務器上繼續執行程序。

那什麼是screen命令?
screen被稱之爲一個全屏窗口管理器,用他可以輕鬆在一個物理終端上獲得多個虛擬終端的效果。

screen功能說明:
簡單來說,Screen是一個可以在多個進程之間多路複用一個物理終端的窗口管理器,這意味着你能夠使用一個單一的終端窗口運行多終端的應用。Screen中有會話的概念,用戶可以在一個screen會話中創建多個screen窗口,在每一個screen窗口中就像操作一個真實的telnet/SSH連接窗口那樣。

screen命令語法:
screen [-AmRvx -ls -wipe][-d <作業名稱>][-h <行數>][-r <作業名稱>][-s ][-S <作業名稱>]

screen命令參數:
-A -[r|R]          將所有的視窗都調整爲目前終端機的大小。
-c filename        用指定的filename文件替代screen的配置文件’.screenrc’.
-d [pid.tty.host]  斷開screen進程(使用該命令時,screen的狀態一定要是Attached,也就是說有用戶連在screen裏)。一般進程的名字是以pid.tty.host這種形式表示(用screen -list命令可以看出狀態)。
-D [pid.tty.host]  與-d命令實現一樣的功能,區別就是如果執行成功,會踢掉原來在screen裏的用戶並讓他logout。
-h <行數>         指定視窗的緩衝區行數。

-ls或–list        顯示目前所有的screen作業。
-m                    即使目前已在作業中的screen作業,仍強制建立新的screen作業。
-p number or name  預先選擇一個窗口。
-r [pid.tty.host]  恢復離線的screen進程,如果有多個斷開的進程,需要指定[pid.tty.host]
-R                      先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
-s shell             指定建立新視窗時,所要執行的shell。
-S <作業名稱>  指定screen作業的名稱。(用來替代[pid.tty.host]的命名方式,可以簡化操作).
-v                     顯示版本信息。
-wipe                檢查目前所有的screen作業,並刪除已經無法使用的screen作業。
-x                     恢復之前離線的screen作業。

screen命令的常規用法:
screen -d -r:連接一個screen進程,如果該進程是attached,就先踢掉遠端用戶再連接。
screen -D -r:連接一個screen進程,如果該進程是attached,就先踢掉遠端用戶並讓他logout再連接
screen -ls或者-list:顯示存在的screen進程,常用命令
screen -m:如果在一個Screen進程裏,用快捷鍵crtl+a c或者直接打screen可以創建一個新窗口,screen -m可以新建一個screen進程。
screen -dm:新建一個screen,並默認是detached模式,也就是建好之後不會連上去。
screen -p number or name:預先選擇一個窗口。

screen實現後臺運行程序的簡單步驟:
1> 要進行某項操作時,先使用命令創建一個screen
[linux@user~]$ screen -S test1

2> 接着就可以在裏面進行操作了,如果你的任務還沒完成就要走開的話,使用命令保留Screen:
[linux@user~]$ Ctrl+a+d                  #按Ctrl+a,然後再按d即可保留Screen
[detached]                                      #這時會顯示出這個提示,說明已經保留好Screen了
如果你工作完成的話,就直接輸入
[linux@user~]$ exit                         #這樣就表示成功退出了
[screen is terminating]

3> 如果你上一次保留了Screen,可以使用命令查看
[linux@user~]$ screen -ls
There is a screen on:
9649.test1   (Detached)

恢復screen,使用命令:
[linux@user~]$ screen -r test1 (or 9649)

killall screen   刪除全部

screen命令中用到的快捷鍵
Ctrl+a c :創建窗口
Ctrl+a w :窗口列表
Ctrl+a n :下一個窗口
Ctrl+a p :上一個窗口
Ctrl+a 0-9 :在第0個窗口和第9個窗口之間切換
Ctrl+a K(大寫) :關閉當前窗口,並且切換到下一個窗口(當退出最後一個窗口時,該終端自動終止,並且退回到原始shell狀態)
exit :關閉當前窗口,並且切換到下一個窗口(當退出最後一個窗口時,該終端自動終止,並且退回到原始shell狀態)
Ctrl+a d :退出當前終端,返回加載screen前的shell命令狀態

Linux的screen命令挺不錯,在服務器上做點什麼費時的工作就不用愁了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章