2014-07-04 69 views
0

我是linux系統的新手,我試圖讓PHP腳本無限次運行。請注意,我正在使用Debian 7如何在無限次的shell腳本中運行php文件

所以,我用screen打開一個窗口,到目前爲止,我已經worker.php文件已經成功運行,我需要使shell腳本無限次地運行php腳本。

所以我想出了這一點:

#!/bin/sh 
for ((; ;)) 
do 
    /usr/bin/php worker.php 
    sleep 1 
done 

的問題是,當試圖在screen運行./worker.sh,我得到這個錯誤:

bash: ./worker.sh: /bin/sh^M: bad interpreter: No such file or directory 

所以我剝奪的for,並用一個簡單的echo代替它,結果導致相同的錯誤,所以我寫了這個問題,因爲我不知道什麼是錯的,服務器上都存在shbash,我是想知道是否shebang是錯誤的,但是..我有automysqlbackup腳本,它以相同的shebang開頭。

你知道什麼是錯的嗎?我只是一個新手..不是很瞭解。 如果你想知道我爲什麼每秒都在運行一個文件,那是因爲這個文件充當遊戲中隊列的命令處理器。每分鐘用cron運行它都太慢了。 MySQL觸發器不適合我的需求,所以我不得不這樣做。

問候。

+0

你可能在你的shebang的末尾有一個'^ M'回車字符,因爲它說'/ bin/sh^M'沒有存在。例如您在Windows機器上構建了腳本文件,並在Unix-ish框中執行它。 –

回答

0

從消息看來,您的shebang行末尾有一個<cr><lf>(#!one)。由於在debian unix上它不是一個有效的行結束符(它位於windows和其他一些unix類型上),所以它被視爲文件名的一部分,因此o/s無法找到要運行的程序。

修復它需要是這樣的:

tr -d '\015' <worker.sh> worker_nocr.fixed 

此外,如你使用bash作爲你的shell,你可能希望改變家當來使用bash爲好,或其他東西可能無法正常工作當你在命令提示符下輸入時,它們工作正常