Linux后台執行腳本 &與nohup


Linux后台執行腳本的方式:


0、腳本代碼

[root@VM_1_3_centos apps]# cat test.php
<?php
sleep(5);
echo "hello world!\n";


1、& 符號
當在前台運行某個作業時,終端被該作業占據;可以在命令后面加上& 實現后台運行。
示例1、

[root@VM_1_3_centos apps]# php test.php &
[1] 28376   //進程ID
[root@VM_1_3_centos apps]# jobs
[1]+  Running                 php test.php &
//5s后,腳本內容輸出到控制台上
[root@VM_1_3_centos apps]# hello world!

[1]+  Done                    php test.php
[root@VM_1_3_centos apps]# 

以上方式在命令產生輸出時,會將腳本輸出內容顯示在控制台上,可能會影響控制台的操作。

示例2、結果輸出到指定文件

[root@VM_1_3_centos apps]# php test.php >out.txt 2>&1 &
[1] 29637
[root@VM_1_3_centos apps]# jobs
[1]+  Running                 php test.php > out.txt 2>&1 &
//當腳本執行完畢后,Enter控制台,就會輸出Done腳本進程
[root@VM_1_3_centos apps]#
[1]+  Done                    php test.php > out.txt 2>&1
[root@VM_1_3_centos apps]# 

此時所有的標准輸出和錯誤輸出都將被重定向到out.txt文件中。

2、nohup
使用&命令時,關閉當前控制台窗口或退出當前帳戶時,作業就會停止運行。
nohup命令則可以在退出帳戶或關閉窗口后繼續運行進程。
nohup即no hang up[不掛起]。

示例1、

[root@VM_1_3_centos apps]# nohup php test.php &
[1] 1013
[root@VM_1_3_centos apps]# nohup: ignoring input and appending output to `nohup.out'

[root@VM_1_3_centos apps]# jobs
[1]+  Running                 nohup php test.php &
[root@VM_1_3_centos apps]# vim nohup.out 

默認情況下,nohup的進程腳本輸出會被重定向到nohup.out的文件中。

示例2、結果輸出到指定文件

[root@VM_1_3_centos apps]# nohup php test.php >out.txt 2>&1 &
[1] 3550
[root@VM_1_3_centos apps]# jobs
[1]+  Running                 nohup php test.php > out.txt 2>&1 &
[root@VM_1_3_centos apps]# 

此時所有的標准輸出和錯誤輸出都將被重定向到out.txt文件中。

許多人使用了nohup之后,就不再管了,其實這樣有可能在當前賬戶非正常退出或者結束的時候,命令還是自己結束了。
所以在使用nohup命令后台運行命令之后,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在后台運行。

Note:解析以下命令

php test.php >out.txt 2>&1 &

php test.php >out.txt 表示將腳本的標准輸出重定向到 out.txt 文件,不打印在屏幕上。
2>&1 表示將標准出錯重定向到標准輸出,由於我們的標准輸出已經重定向到了 out.txt 文件,所以標准出錯也會輸出到 out.txt 文件中。
最后一個 & 符號, 是讓該命令在后台執行。
那么2>1呢?
2 與 > 結合代表錯誤重定向,而 1 則代表錯誤重定向到一個文件1,而不代表標准輸出;
換成2>&1,&與1結合就代表標准輸出了,就變成錯誤重定向到標准輸出.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM