Cronjob 有什么 javascript 替代品吗?
问题是,我的老板不想再使用 CronJob 进行日常执行,并告诉我如果我们可以使用 javascript 而不是 CronJob 来完成。
我写了一个 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 值设置为总最大运行时间所有的工作。
- 如果我将其设置为 true 会发生什么?我担心的是,如果一个作业不能在 setTimeout 间隔之前完成,它的 next_run 将不会被设置,它会自动重新执行。那么我应该在 ajax 调用之前设置 next_run 值吗?
回到主题,我需要做这一切吗?有更好的解决方案或库吗?(我用谷歌搜索但找不到任何有用的东西。)
谢谢