多種方式讓Linux進(jìn)程后臺(tái)穩(wěn)定運(yùn)行
我們經(jīng)常會(huì)遇到這樣的問(wèn)題,遠(yuǎn)程登錄到Linux服務(wù)器后,執(zhí)行一些耗時(shí)較長(zhǎng)的任務(wù),但由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致任務(wù)中途失敗。為了確保命令在后臺(tái)穩(wěn)定運(yùn)行,我們可以采用不同的方法來(lái)處理這個(gè)問(wèn)題。 場(chǎng)景:臨時(shí)需要長(zhǎng)
我們經(jīng)常會(huì)遇到這樣的問(wèn)題,遠(yuǎn)程登錄到Linux服務(wù)器后,執(zhí)行一些耗時(shí)較長(zhǎng)的任務(wù),但由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致任務(wù)中途失敗。為了確保命令在后臺(tái)穩(wěn)定運(yùn)行,我們可以采用不同的方法來(lái)處理這個(gè)問(wèn)題。
場(chǎng)景:臨時(shí)需要長(zhǎng)時(shí)間運(yùn)行的命令
如果只是臨時(shí)有一個(gè)命令需要長(zhǎng)時(shí)間運(yùn)行,有哪些簡(jiǎn)便的方法可以保證它在后臺(tái)穩(wěn)定運(yùn)行呢?
1. nohup
nohup的作用就是讓提交的命令忽略hangup信號(hào)。使用nohup非常方便,只需要在要處理的命令前加上nohup即可。標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤會(huì)被重定向到nohup.out文件中。我們還可以通過(guò)在命令末尾加上""將命令放入后臺(tái)運(yùn)行,或者使用"> filename 2>1"來(lái)更改重定向文件名。
示例:
nohup ping amp;
2. setsid
setsid命令可以使我們的進(jìn)程不屬于接受hangup信號(hào)的終端的子進(jìn)程,從而避免受到hangup信號(hào)的影響。使用setsid也非常方便,只需在要處理的命令前加上setsid即可。
示例:
setsid ping
值得注意的是,使用setsid命令后,我們的進(jìn)程的父ID(PPID)將變?yōu)?,即init進(jìn)程的PID,并不是當(dāng)前終端的進(jìn)程ID。
3. 使用subshell
將一個(gè)或多個(gè)命令包含在“()”中,可以讓這些命令在一個(gè)子shell中運(yùn)行。當(dāng)我們將""也放入“()”內(nèi)之后,所提交的作業(yè)將無(wú)法通過(guò)jobs命令查看,也就是說(shuō),不受當(dāng)前終端的hangup信號(hào)影響。
示例:
(ping amp;)
通過(guò)使用不同的方法,我們可以確保長(zhǎng)時(shí)間運(yùn)行的命令在后臺(tái)穩(wěn)定運(yùn)行,不受本地關(guān)閉終端窗口或網(wǎng)絡(luò)斷開(kāi)連接的干擾。