幾年前在developerWorks上面看到的文章,感受很是實用,又簡樸整理了一下,轉(zhuǎn)到這里,但愿給看到的人帶來一些輔佐。文中提到的nohup和subshell方法一直在利用。
我們常常會遇到這樣的問題,用 telnet/ssh 登錄了長途的 Linux 處事器,運行了一些耗時較長的任務(wù), 功效卻由于網(wǎng)絡(luò)的不不變導致任務(wù)半途失敗。如何讓呼吁提交后不受當?shù)胤怄i終端窗口/網(wǎng)絡(luò)斷開毗連的滋擾呢?下面舉了一些例子, 您可以針對差異的場景選擇差異的方法來處理懲罰這個問題。
假如只是姑且有一個呼吁需要長時間運行,什么要領(lǐng)能最輕便的擔保它在靠山不變運行呢?
辦理要領(lǐng):
1.nohup
我們知道,當用戶注銷(logout)可能網(wǎng)絡(luò)斷開時,終端會收到HUP(hangup)信號從而封鎖其所有子歷程。因此,,我們的辦理步伐就有兩種途徑:要么讓歷程忽略
HUP 信號,要么讓歷程運行在新的會話里從而成為不屬于此終端的子歷程。
HANGUP名稱的理由,在Unix的早期版本中,每個終端城市通過modem 和系統(tǒng)通訊。當用戶 logout 時,modem 就會掛斷(hang up)電話。 同理,當modem斷開毗連時,就會給終端發(fā)送hangup信號來通知其封鎖所有子歷程。
nohup 無疑是我們首先想到的步伐。顧名思義,nohup 的用途就是讓提交的呼吁忽略 hangup 信號。讓我們先來看一下 nohup 的輔佐信息:
NOHUP(1)
User
Commands
NOHUP(1)
NAME
nohup – run a command immune to hangups, with output to a
non-tty
SYNOPSIS
nohup COMMAND [ARG]…
nohup OPTION
DESCRIPTION
Run COMMAND, ignoring hangup signals.
–help display this help and exit
–version output version information and exit
可見,nohup 的利用是十分利便的,只需在要處理懲罰的呼吁前加上 nohup 即可,尺度輸出和尺度錯誤缺省會被重定向到 nohup.out 文件中。一般我們可在末了加上“&”來將呼吁同時放入靠山運行,也可用”>filename 2>&1″來變動缺省的重定向文件名。
nohup 示例
[[email protected] ~]# nohup ping www.ibm.com &;
[1] 3059 nohup: appending output to `nohup.out'
[[email protected] ~]# ps -ef |grep 3059
root 3059 984 0 21:06 pts/3 00:00:00 ping www.ibm.com
root 3067 984 0 21:06 pts/3 00:00:00 grep 3059
[[email protected] ~]#