首頁 > linux教程 > Linux系統管理 閱讀:0更新時間:2020-03-28 01:05:12

Linux nohup命令:后臺命令脫離終端運行

在前面章節中,我們一直在說進程可以放到后臺運行,這里的后臺,其實指的是當前登陸終端的后臺。這種情況下,當我們以遠程管理服務器的方式,在遠程終端執行后臺命令,如果在命令尚未執行完畢時就退出登陸,那么這個后臺命令還會繼續執行嗎?

當然不會,此命令的執行會被中斷。這就引出一個問題,如果我們確實需要在遠程終端執行某些后臺命令,該如何執行呢?有以下 3 種方法:
  1. 把需要在后臺執行的命令加入 /etc/rc.local 文件,讓系統在啟動時執行這個后臺程序。這種方法的問題是,服務器是不能隨便重啟的,如果有臨時后臺任務,就不能執行了。
  2. 使用系統定時任務,讓系統在指定的時間執行某個后臺命令。這樣放入后臺的命令與終端無關,是不依賴登錄終端的。
  3. 使用 nohup 命令。

本節重點講解 nohup 命令的用法。nohup 命令的作用就是讓后臺工作在離開操作終端時,也能夠正確地在后臺執行。此命令的基本格式如下:

[root@localhost ~]# nohup [命令] &

注意,這里的‘&’表示此命令會在終端后臺工作;反之,如果沒有‘&’,則表示此命令會在終端前臺工作。

例如:

[root@localhost ~]# nohup find / -print > /root/file.log &
[3] 2349
#使用find命令,打印/下的所有文件。放入后臺執行
[root@localhost ~]# nohup:忽略輸入并把輸出追加到"nohup.out"
[root@localhost ~]# nohup:忽略輸入并把輸出追加到"nohup.out"
#有提示信息

接下來的操作要迅速,否則 find 命令就會執行結束。然后我們可以退出登錄,重新登錄之后,執行“ps aux”命令,會發現 find 命令還在運行。

如果 find 命令執行太快,我們就可以寫一個循環腳本,然后使用 nohup 命令執行。例如:

[root@localhost ~]# vi for.sh
#!/bin/bash
for ((i=0;i<=1000;i=i+1))
#循環1000次
do
echo 11 >> /root/for.log
#在for.log文件中寫入11
sleep 10s
#每次循環睡眠10秒
done
[root@localhost ~]# chmod 755 for.sh
[root@localhost ~]# nohup /root/for.sh &
[1] 2478
[root@localhost ~]# nohup:忽略輸入并把輸出追加到"nohup.out"
#執行腳本

接下來退出登錄,重新登錄之后,這個腳本仍然可以通過“ps aux”命令看到。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩