在計劃任務中常常能夠看到。例如咱們公司的計劃任務舉例:php
*/2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne >/dev/null 2>&1 */2 * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testTwo >/dev/null 2>&1
對於& 1 更準確的說應該是文件描述符 1,而1標識標準輸出,stdout。
對於2 ,表示標準錯誤,stderr。
2>&1 的意思就是將標準錯誤重定向到標準輸出。這裏標準輸出已經重定向到了 /dev/null。那麼標準錯誤也會輸出到/dev/nullhtml
能夠把/dev/null 能夠看做"黑洞". 它等價於一個只寫文件. 全部寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什麼也讀不到.post
偶爾也能夠把 & 在命令的最後加上,表示讓程序後臺執行。測試
爲什麼2>&1要寫在後面?code
index.php task testOne >/dev/null 2>&1
咱們能夠理解爲,左邊是標準輸出,好,如今標準輸出直接輸入到 /dev/null 中,而2>&1是將標準錯誤重定向到標準輸出,因此當程序產生錯誤的時候,至關於錯誤流向左邊,而左邊依舊是輸入到/dev/null中。htm
能夠理解爲,若是寫在中間,那會把隔斷標準輸出指定輸出的文件blog
你能夠用class
ls 2>1測試一下,不會報沒有2文件的錯誤,但會輸出一個空的文件1;
ls xxx 2>1測試,沒有xxx這個文件的錯誤輸出到了1中;
ls xxx 2>&1測試,不會生成1這個文件了,不過錯誤跑到標準輸出了;
ls xxx >out.txt 2>&1, 實際上可換成 ls xxx 1>out.txt 2>&1;重定向符號>默認是1,錯誤和輸出都傳到out.txt了。test