最近遇到一個問題, 執行腳本,腳本調用 一個命令,命令(deamon)是一個守護進程,為了調試,取消了守護進程模式。導致命令後邊的其他命令(echo "456")都無法執行。 deamon -d 是以守護進程模式啟動;deamon -x 是以非守護進程模式啟動(監控進程,死迴圈),stdout和st ...
最近遇到一個問題,
執行腳本,腳本調用 一個命令,命令(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 是一樣的意思。