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結合就代表標准輸出了,就變成錯誤重定向到標准輸出.