2017-04-07 18 views
1

PHPスクリプトを実行するのに約15時間かかるため、週に1回実行する必要があります。スクリプトは大量の(70gb)CSVファイルの内容をデータベースにダウンロードしてデータベースに抽出します。Cronジョブがバックグラウンドでスクリプトを実行して15時間実行する

毎週日曜日午後6時に実行を開始し、ファイルの処理が完了するまで実行を続けるにはスクリプトが必要です。

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 

どのように私はこれを改善することができるだろう

私の計画には、以下がありますbashのファイル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手段は、同じファイルstdoutに標準エラー出力をリダイレクトする使用しています。

残りはすべて問題ありません。シェルスクリプト内にコマンドを置くと、行が長すぎると読みやすくなります。また、後でタスクがより多くのことをしたい場合は、スクリプトファイルを更新する方が簡単です。

おそらくもっと意味のあるものにcron.shファイルの名前を変更します。

+0

また、スクリプトファイルで実行するコマンドを分離することで、cron権限を持たないユーザーはスクリプトを更新できます(適切なファイル権限を持っている場合)。 – kontiki

1

あなたのOPは「これをどのように改善できますか」と尋ねたので、PHPを使いたければ言及していません。

CSVが大きい場合は、PHPファイルと同じことを行うbashファイルを作成します(既にcron.shを呼び出しているため)。効率的に実行するには、PHP設定を理想的な設定に変更する必要があります。 IMHOストレートbashは行く方法です。そうすれば、nohupは完全にバイパスできます。私は希望の意味

:MySQLはしっかり.SHファイルからDBに接続する

1)は、ログインパスを作成します。

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に入れます。あなたは、ユーザーはあなたがそれを置くbashのファイルまたはディレクトリへのアクセス権を持っていない場合は、ユーザーのcrontabが、あるいは、あなたがルートのcrontab使用することができます使用することができます - IE:

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

に持っていないの保存オーバーヘッドPHPを使用すると、実行時の文字通りの時間を節約できます。

関連する問題