Cronjobに代わるJavaScriptはありますか?
問題は、私の上司はCronJobを毎日の実行に使用したくないということであり、CronJobの代わりにjavascriptを使用してそれを実行できるかどうかを教えてくれました。
私はphp+javascriptコードを書きました。基本的に、データベースから毎日のタスクデータ(実行する.phpファイル、時間間隔など)を収集し、オブジェクトに配置します。
それで、
<script>
function mainFunc(){
for(var i=0; i<sizeOfJobs(); i++){ //traverse in the object
currentDate = new Date();
//if any of the jobs execution time has come, execute it
if(jobs[i]['next_run'] <= currentDate){
$.ajax({
url: jobs[i]['file_location'] ,
async: false, //this is another question, look below please
success: function(data){
//after the finish, set next_run and last_run
currentDate = new Date();
jobs[i]['last_run'] = currentDate;
var nextRun = new Date();
nextRun.setTime(currentDate.getTime() + (jobs[i]['interval'] * 60 * 1000));
jobs[i]['next_run'] = nextRun;
}
});
}
}
//repeat
//currently 10 sec but it will increase according to jobs max runtime
setTimeout(mainFunc,10000);
}
$(document).ready(function(){
setTimeout(mainFunc,10000);
})
</script>
だから、私はこのコードを使用します。基本的なジョブでは問題なく動作しますが、完了するまでに10分以上かかる巨大なジョブがあります(データベーステーブルの削除や数千行の補充など)
- 安全ですか?
- 「非同期」値をfalseに設定する必要がありますか?
- 同時に実行する必要のあるジョブが存在する可能性があることを認識しており、async falseを設定すると、すべてのジョブが前のジョブの終了などを待機する必要があるため、setTimeout値を合計最大実行時間に設定する必要がありますすべての仕事の。
- 私がそれを真実に設定した場合、それは何が起こる可能性がありますか?私が恐れているのは、setTimeout間隔の前にジョブを終了できない場合、next_runは設定されず、自動的に再実行されることです。では、ajax呼び出しの前にnext_run値を設定する必要がありますか?
メイントピックに戻ると、これをすべて行う必要がありますか?より良い解決策やライブラリはありますか?(私はグーグルで検索しましたが、有用なものは何も見つかりませんでした。)
ありがとうございました