ftp 指令碼 超時設定

2021-05-26 23:39:53 字數 1372 閱讀 1305

本文由

@lonelyrains 

今天剛學了一點shell指令碼的程式設計知識,寫了乙個ftp指令碼,如果沒有設定目錄則設定目錄,並上傳檔案到伺服器該二級目錄。如下:

#!/bin/sh

cp $1 $2

ftp -n $3 《其中$1、$2、$3、$4、$5、$6、$7均為輸入引數,分別表示正在使用的檔案、需要上傳的備份檔案、遠端主機ip位址、ftp伺服器使用者名稱、ftp伺服器密碼、ftp伺服器一級目錄、ftp伺服器二級目錄。

呼叫該指令碼的c程式**為:

pid_t pid;

if((pid = fork()) < 0)

perror("fork error");

else if(pid == 0)

waitpid(pid,null,0);//以阻塞方式呼叫子程序,直到ftp的返回結果

問題是這樣一來,程式不能知道ftp到底執行成功沒有,如果沒有,waitpid(pid,null,0)需要等大約3分鐘才能知道結果。網上查了很多ftp的資料,都沒有客戶端設定超時時間的方法。後來想到用程式計時的方式和非阻塞等待的方式呼叫waitpid,修改的**如下:

pid_t pid,pidrtn;

struct timeval tvstart,tvend;

float timeuse=0;

gettimeofday(&tvstart,null);

if((pid = fork()) < 0)

perror("fork error");

else if(pid == 0)

//呼叫ftp的指令碼,自設定時,waitpid的wnohang選項,參考waitpid.c

while(timeuse < 10)

else break;

gettimeofday(&tvend,null);

timeuse = 1000000*(tvend.tv_sec-tvstart.tv_sec)

+tvend.tv_usec-tvstart.tv_usec;

timeuse /=1000000;

}if(pidrtn == 0)

else printf("pidrtn:%d",pidrtn);

這樣一來就保證了ftp超時也能讓程式知道,超時時間也可以自己設定,而且可以執行後續的程式而不用掛死在這裡等ftp超時。

但是仍然有不完善的地方。大多數情況下,上傳需要多少時間程式設計師大概知道,從而設定較合理的超時時間。但是仍存在可能突然檔案很大,而超過超時時間,在超時時間之後實際上傳成功,而程式內顯示超時。所以,可以根據需上傳的檔案大小動態設定超時時間。當然,最理想的是,超過設定的超時時間之後,馬上關掉ftp的執行。這個不是關閉子程序就行的,目前也沒找到好的方法。

php指令碼超時時間設定

設定php指令碼執行超時的時間有下面這樣一些方法 php.ini 中預設的最長執行時間是 30 秒,這是由 php.ini 中的 max execution time 變數指定,倘若你有乙個需要頗多時間才能完成的工作,例如要傳送很多電子郵件給大量收件者,或者要進行繁重的資料分析工作,伺服器會在 30...

php指令碼超時時間設定

設定php指令碼執行超時的時間有下面這樣一些方法 php.ini 中預設的最長執行時間是 30 秒,這是由 php.ini 中的 max execution time 變數指定,倘若你有乙個需要頗多時間才能完成的工作,例如要傳送很多電子郵件給大量收件者,或者要進行繁重的資料分析工作,伺服器會在 30...

php int 設定超時,php如何設定超時時間

php設定超時的解決方法 1 初始設定指令碼執行時間 開啟php.ini檔案,找到 max execution time 30 修改為 max execution time 600 如果你沒有伺服器修改許可權,可通過內建php指令碼的方法設定超時時間,在需要首席執行官時間操作的php檔案中新增以下 ...