幾年前在developerWorks上面看到的文章,感受很是實(shí)用,又簡(jiǎn)樸整理了一下,轉(zhuǎn)到這里,但愿給看到的人帶來一些輔佐。文中提到的nohup和subshell方法一直在利用。
我們常常會(huì)遇到這樣的問題,用 telnet/ssh 登錄了長(zhǎng)途的 Linux 處事器,運(yùn)行了一些耗時(shí)較長(zhǎng)的任務(wù), 功效卻由于網(wǎng)絡(luò)的不不變導(dǎo)致任務(wù)半途失敗。如何讓呼吁提交后不受當(dāng)?shù)胤怄i終端窗口/網(wǎng)絡(luò)斷開毗連的滋擾呢?下面舉了一些例子, 您可以針對(duì)差異的場(chǎng)景選擇差異的方法來處理懲罰這個(gè)問題。
假如只是姑且有一個(gè)呼吁需要長(zhǎng)時(shí)間運(yùn)行,什么要領(lǐng)能最輕便的擔(dān)保它在靠山不變運(yùn)行呢?
辦理要領(lǐng):
1.nohup
我們知道,當(dāng)用戶注銷(logout)可能網(wǎng)絡(luò)斷開時(shí),終端會(huì)收到HUP(hangup)信號(hào)從而封鎖其所有子歷程。因此,,我們的辦理步伐就有兩種途徑:要么讓歷程忽略
HUP 信號(hào),要么讓歷程運(yùn)行在新的會(huì)話里從而成為不屬于此終端的子歷程。
HANGUP名稱的理由,在Unix的早期版本中,每個(gè)終端城市通過modem 和系統(tǒng)通訊。當(dāng)用戶 logout 時(shí),modem 就會(huì)掛斷(hang up)電話。 同理,當(dāng)modem斷開毗連時(shí),就會(huì)給終端發(fā)送hangup信號(hào)來通知其封鎖所有子歷程。
nohup 無(wú)疑是我們首先想到的步伐。顧名思義,nohup 的用途就是讓提交的呼吁忽略 hangup 信號(hào)。讓我們先來看一下 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 即可,尺度輸出和尺度錯(cuò)誤缺省會(huì)被重定向到 nohup.out 文件中。一般我們可在末了加上“&”來將呼吁同時(shí)放入靠山運(yùn)行,也可用”>filename 2>&1″來變動(dòng)缺省的重定向文件名。
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] ~]#