2017-04-07 191 views
1

我有一個PHP腳本,需要大約15個小時才能運行,我必須每週運行一次。該腳本將大量(70GB)CSV文件的內容下載並提取到我們的數據庫中。在後臺運行Cron作業腳本並運行15小時

我需要腳本在每個星期日的下午6點開始運行,並保持運行,直到完成文件處理。

我的計劃是創建一個bash文件cron.sh具有以下:

nohup php /var/www/html/cron.php > /var/www/html/outputs/`date "+%Y-%m-%d %H:%M:%S"`.log 

而且cron的幸福:

0 18 * * 0 /var/www/html/cron.sh 

我怎麼能提高呢?

+0

改進什麼?將csv內容添加到db的時間? –

+0

對不起,不太清楚。 cronjob執行PHP腳本的過程的一部分。例如 例如。我應該直接從cron作業執行php腳本等。 – MagnusD

+0

不要在評論中添加細節。相反,[編輯]你的問題,並把它放在它所屬的地方。你的帖子應該包含一個*明確的,具體的問題描述*和一個與該問題相關的特定問題*。你沒有。 –

回答

1

記住重定向標準錯誤,以及:

nohup php /var/www/html/cron.php > dir/stdout.log 2> dir/stderr.log 

,或者如果你喜歡他們都合併在同一個文件:使用

nohup php /var/www/html/cron.php > dir/stdout.log 2>&1 

2>&1手段STDERR重定向到同一個文件的stdout 。

其餘的都沒有問題,把命令放在shell腳本中會使得它在線太長時更具可讀性。此外,如果您稍後想讓該任務執行更多操作,則更新腳本文件會更容易。

我可能會將cron.sh文件重命名爲更有意義的文件。

+0

另外,通過分隔要在腳本文件中執行的命令,沒有cron特權的用戶仍然可以更新腳本(如果他/她具有正確的文件權限)。 – kontiki

1

由於您的OP詢問「我將如何能夠改善這一點」 - 您沒有提及您是否要使用PHP。

如果CSV很大..我會創建一個bash文件,它和PHP文件一樣(因爲您已經打電話給cron.sh)。您將不得不將PHP配置更改爲理想的設置,以便能夠高效地運行它。恕我直言,bash是最好的選擇。這種方式nohup可以完全繞過。

含義我想:

1)創建登錄路徑爲MySQL安全地從sh文件連接到你的數據庫。您可以通過以下命令獲得此結果:

sudo mysql_config_editor set --login-path=client --host=yourHost --user=MySQL_user --password 

系統將提示您輸入MySQL密碼。

2)一旦做到這一點,你可以像這樣你的bash文件訪問MySQL並創建你的日誌都在同一個文件:

#!/bin/bash 

cd /place/where/you/want/the/csv/ 

wget http://your_file_location.com/csv/location/file.csv 
# Or whatever you're doing to "download" it -- Just an example .. 

mysql --login-path=local infile=1 3parsfdb -e "LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE your_table FIELDS TERMINATED BY ','" 

echo "Whatever you've collected" >> /var/www/html/outputs/`date "+%Y-%m-%d %H:%M:%S"`.log 

當然,這只是一個例子。但你得到大致的想法。然後將所述bash文件存儲在安全的位置。

3)將新創建的bash文件放入crontab中。您可以使用您的用戶crontab,或者如果用戶不能夠訪問你把它在bash的文件或目錄,你可以用root的crontab - IE:

0 18 * * 0 /path/to/your/bash/file/BackupCSVToDB.sh 

不必的節省開銷使用PHP可以節省幾個小時的運行時間。