shell 腳本中后台執行命令 &


最近遇到一個問題,

執行腳本,腳本調用 一個命令,命令(deamon)是一個守護進程,為了調試,取消了守護進程模式。導致命令后邊的其他命令(echo "456")都無法執行。

deamon -d 是以守護進程模式啟動;deamon -x 是以非守護進程模式啟動(監控進程,死循環),stdout和stderr 關聯到 控制終端。

腳本是 a.sh

#!/bin/sh

echo “123“

/usr/local/bin/deamon -d & >/dev/null 2>&1

echo “456”

執行腳本,輸出如下:

[root@localhost]#./a.sh

[root@localhost]#123

[root@localhost]#456

[root@localhost]# 


符合我的要求,deamon 在后台運行。deamon后面的命令得到運行。

現在我打算把deamon 換成 調試模式 ,deamon -x,輸出重定向到 /tmp/debug.info文件

修改a.sh 如下:

#!/bin/sh

echo “123“

/usr/local/bin/deamon -x & >/tmp/debug.info 2>&1

echo “456”

執行腳本,輸出如下:

[root@localhost]#./a.sh

[root@localhost]#123

[root@localhost]#deamon的輸出信息 

這並不是我想要的,deamon的輸出沒重定向到debug.info文件,並且deamon后邊的命令沒執行。

經過修改a.sh如下,實現了我的目的。

#!/bin/sh

echo “123“

/usr/local/bin/deamon -x  >/tmp/debug.info 2>&1 &

echo “456”

執行后結果是

[root@localhost]#./a.sh

[root@localhost]#123

[root@localhost]#456

[root@localhost]#

deamon的輸出信息重定向到/tmp/debug.info文件中。

 總結如下:

1.后台符號 &一定要放在整個命令最后。
2.重定向>,>>一定緊跟着重定向文件
3.如果是 文件輸出 1 stdout,2 stderr 要重定向到別的文件,也是緊跟>,>>符號。
4.如果想讓stderr也跟 stdout一樣輸出到文件,使用
/usr/local/bin/cmd >file 2>&1

同 /usr/local/bin/cmd 1>file 2>&1 是一樣的意思

 

補充:

腳本中使用 以下命令關閉0,1,2描述符

exec 0>&-

exec 1>&-

exec 2>&1

 


免責聲明!

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



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