def remove_job(): jobstore = 'default' json_parms = request.get_json(force=True) job_id = json_parms.get('job_id', '') if job_id != '': scheduler.remove_job(job_id, jobstore) return jsonify('success')
def get(self): job_id = self.get_query_argument('job_id', None) action = self.get_query_argument('action', None) if job_id: # add if 'add' == action: if job_id not in JOB_IDS: JOB_IDS.append(job_id) scheduler.add_job(task1, 'interval', seconds=3, id=job_id, args=(job_id, )) self.write('[TASK ADDED] - {}'.format(job_id)) else: self.write('[TASK EXISTS] - {}'.format(job_id)) # remove elif 'remove' == action: if job_id in JOB_IDS: scheduler.remove_job(job_id) JOB_IDS.remove(job_id) self.write('[TASK REMOVED] - {}'.format(job_id)) else: self.write('[TASK NOT FOUND] - {}'.format(job_id)) else: self.write('[INVALID PARAMS] INVALID job_id or action')
def remove_service_job(): jobstore = 'service_jobs' json_parms = request.get_json(force=True) id = json_parms.get('id', '') scheduler.remove_job(id, jobstore) response = scheduler.get_all_service_jobs(jobstore) return jsonify(response)
def change_task_status(status, id): """ 改变任务状态 (('add', '启动'), ('pause', '暂停'), ('run', '运行'), ('stop', '停止')) """ # 验证任务是否存在 task = Task.objects(id=id).first() if not task: flash('任务不存在') else: # 验证状态 if status not in ('add', 'pause', 'run', 'stop'): flash('无效任务状态[' + status + ']') return redirect(url_for('core.tasks')) if status == 'add': add_job(task) else: job = scheduler.get_job(id) if not job: flash('任务未启动') return status if status == 'run': scheduler.resume_job(id) elif status == 'pause': scheduler.pause_job(id) elif status == 'stop': scheduler.remove_job(id) flash('操作成功') return status
def delete_job(ref_num): try: scheduler.remove_job(ref_num) print '[%s] Job deleted: %s' % (str(datetime.now()), ref_num) except: flash('Cannot delete, job not found.') return redirect(url_for('index'))
def remove_task(): data = request.json ids = data.get('id') _data = Task.query.filter_by(id=ids).first() scheduler.remove_job(str(ids)) # 添加任务 _data.status = '创建' db.session.commit() return jsonify({'msg': '移除成功', 'status': 1})
def scheduler_job(job, scheduler=None, cron_change=None): if not scheduler: from app import scheduler scheduler_job_id = 'job_' + str(job.id) print('scheduler_job:', job.id, job.is_start, job.mail_id, scheduler.get_jobs()) mail = None if scheduler.get_job( scheduler_job_id) and not cron_change and job.is_start == 1: print('此任务已在执行') return if job.cron and job.triggers: if job.mail_id: mail = Mail.query.get(job.mail_id) else: print('此任务没有配置邮件接收人') if job.is_start == 1: cron = job.cron.split(' ') print(cron) if len(cron) != 6: print('cron表达式不正确', job.name) return if cron_change: print('定时任务规则改变') try: scheduler.remove_job(scheduler_job_id) except Exception as e: print(e, '无此任务', job.name) scheduler.add_job(id=scheduler_job_id, func=auto_send_mail, trigger=job.triggers, year=cron[5], month=cron[4], day=cron[3], hour=cron[2], minute=cron[1], second=cron[0], args=(job, mail)) print('get_jobs:', scheduler.get_jobs(), scheduler.get_job(scheduler_job_id)) print(scheduler.get_job('scheduler_job_id')) elif job.is_start == 0: print('get_jobs is:', scheduler.get_jobs()) try: scheduler.remove_job(scheduler_job_id) except Exception as e: print(e, '无此任务', job.name) return print('get_jobs is_after:', scheduler.get_jobs()) print('现在有的任务:', scheduler.get_jobs()) else: print('未输入cron表达式或trigger') return
def remove_task(): """ 移除任务 """ data = request.json current_app.logger.info('url:{} ,method:{},请求参数:{}'.format(request.url, request.method, data)) ids = data.get('id') _data = Task.query.filter_by(id=ids).first() scheduler.remove_job(str(ids)) # 添加任务 _data.status = '创建' db.session.commit() return jsonify({'msg': '移除成功', 'status': 1})
def handle_off(message): user = User.query.filter_by(username=message.chat.username).first() if user: user.notification_time = None try: scheduler.remove_job(message.chat.id) except Exception: print('off error') db.session.commit() bot.send_message(message.chat.id, "Напоминание снято") print(message.text, message.chat.username)
def stop(): name = request.values['name'] if 'name' in request.values else '' extendJobDefine = JobDefine.objects((Q(name=name))).first() if extendJobDefine is None: return XaResult.error(msg=u'请提供正确且存在的任务名称') try: scheduler.remove_job(id=name) app.logger.info(u'%s 任务停止成功!', name) except KeyError, e: app.logger.error(u'%s 任务停止遇到错误,错误信息:%s', name, e.message)
def remove_task(): """ 移除任务 """ data = request.json ids = data.get('id') _data = Task.query.filter_by(id=ids).first() _data.status = '创建' db.session.commit() try: scheduler.remove_job(str(ids)) # 移除任务 except Exception as e: print(e) return jsonify({'msg': '移除成功', 'status': 1})
def remove_job(id, type='html'): if type == 'html': task_id = id elif type == 'rss': task_id = 'rss{}'.format(id) try: scheduler.remove_job('task_{}'.format(task_id)) logger.info('删除task_{}'.format(task_id)) except JobLookupError as e: logger.info(e) logger.info('task_{}不存在'.format(task_id))
def cron_batch_del(): ids = request.form.getlist('id') CronInfos.query.filter( CronInfos.id.in_(ids)).delete(synchronize_session=False) JobLog.query.filter( JobLog.cron_info_id.in_(ids)).delete(synchronize_session=False) db.session.commit() try: for cron_id in ids: scheduler.remove_job('cron_%s' % cron_id) except: pass return web_api_return(code=0, msg='操作成功', url='/cron_list')
def delete_task(): """根据id删除任务""" if not request.content_type == 'application/json': return render_response(-1, msg="Content-type must be application/json.") task_info = request.json task_ids = task_info.get("task_id") if not task_ids: return render_response(-1, msg="task_id is required.") userdata = task_info.get("userdata") logger.info((task_ids, userdata)) if isinstance(task_ids, str): task_ids = [task_ids] # 对task_id进行查询 try: for task_id in task_ids: taskinfo = Task.query.filter((Task.id == task_id) & (Task.is_delete == False)).first() if taskinfo is None: logger.error("task not exist.") return render_response(-1, userdata=userdata, msg='task not exist.') taskinfo.is_delete = True db.session.add(taskinfo) # 删除调度器中的任务 try: scheduler.remove_job(task_id) except: pass db.session.commit() except Exception as e: # 接口调用失败 logger.error("task delete error:{}".format(e)) db.session.rollback() msg = "database delete error." return render_response(-1, msg=msg, userdata=userdata) # logger.info("删除任务成功") return render_response(0, userdata=userdata, msg="delete success.")
def cron_del(): id = request.args.get('id') cif = CronInfos.query.get(id) if not cif: return web_api_return(code=1, msg='项目不存在', url='/cron_list') cron_id = cif.id db.session.delete(cif) try: scheduler.remove_job('cron_%s' % cron_id) except: pass db.session.execute("delete from job_log where cron_info_id='%s'" % cron_id) db.session.commit() return web_api_return(code=0, msg='操作成功', url='/cron_list')
def reload_runnable_spider_job_execution(): ''' add periodic job to scheduler :return: ''' running_job_ids = set([job.id for job in scheduler.get_jobs()]) # app.logger.debug('[running_job_ids] %s' % ','.join(running_job_ids)) available_job_ids = set() # add new job to schedule for job_instance in JobInstance.query.filter_by(enabled=0, run_type="periodic").all(): job_id = "spider_job_%s:%s" % ( job_instance.id, int(time.mktime(job_instance.date_modified.timetuple()))) available_job_ids.add(job_id) if job_id not in running_job_ids: try: scheduler.add_job(run_spider_job, args=(job_instance.id, ), trigger='cron', id=job_id, minute=job_instance.cron_minutes, hour=job_instance.cron_hour, day=job_instance.cron_day_of_month, day_of_week=job_instance.cron_day_of_week, month=job_instance.cron_month, second=0, max_instances=999, misfire_grace_time=60 * 60, coalesce=True) except Exception as e: app.logger.error( '[load_spider_job] failed {} {},may be cron expression format error ' .format(job_id, str(e))) app.logger.info( '[load_spider_job][project:%s][spider_name:%s][job_instance_id:%s][job_id:%s]' % (job_instance.project_id, job_instance.spider_name, job_instance.id, job_id)) # remove invalid jobs for invalid_job_id in filter( lambda job_id: job_id.startswith("spider_job_"), running_job_ids.difference(available_job_ids)): scheduler.remove_job(invalid_job_id) app.logger.info('[drop_spider_job][job_id:%s]' % invalid_job_id)
def suggested_question_pdf(user_id): data = request.data data = data.decode('utf8').replace("'", '"') run_time = datetime.now() + timedelta(0, 300) if data is None or data == '': return jsonify({ 'code': 400, "message": "data is unavailable", "status": 'failed' }) try: json_obj = json.loads(data) except Exception as e: print(e) return jsonify({ 'code': 400, "message": "Invalid data only json data accepted", "status": 'failed' }) job_exist = scheduler.get_job(user_id) if job_exist is None: scheduler.add_job(job, 'date', run_date=run_time, id=str(user_id), kwargs={ 'user_id': user_id, 'json_obj': data }) else: scheduler.remove_job(str(user_id)) scheduler.add_job(job, 'date', run_date=run_time, id=str(user_id), kwargs={ 'user_id': user_id, 'json_obj': data }) return jsonify({'code': 200, "result": [], "status": 'success'})
def __remove_from_scheduler(mid: str): try: scheduler.remove_job(job_id=mid) except JobLookupError: return
def update_task(): """ 更新任务 :return: """ if not request.content_type == 'application/json': return render_response(-1, msg="Content-type must be application/json.") form = AddTaskForm.from_json(request.json) task_id = request.json.get("task_id") userdata = request.json.get('userdata') # 表单验证 if not form.validate(): return render_response(-1, data=form.errors, userdata=userdata) # 任务id验证 if not request.json.get('task_id'): msg = "task id is required" return render_response(-1, msg=msg, userdata=userdata) task = Task.query.get(task_id) # 任务未找到 if not task: render_response(-1, msg='task not exist.') task.task_name = form.task_name.data task.task_type = form.task_type.data task.hours = form.hours.data task.minutes = form.minutes.data # task.seconds = form.seconds.data task.day_of_week = form.day_of_week.data task.day_of_month = form.day_of_month.data task.task_priority = form.task_priority.data task.task_start_date = form.task_start_date.data task.task_end_date = form.task_end_date.data task.task_desc = form.task_desc.data task.alarm_mode = form.alarm_mode.data # task.modifier_id = form.user_id.data # task.modifier_name = form.user_name.data task.task_status = 0 channels_info = form.channels.data if not channels_info: return render_response(-1, msg="no channel selected.") channels_old = Channel.query.filter_by(task_id=task.id).all() for channel in channels_old: channel.is_delete = True db.session.add(channel) for channel_info in channels_info: channel = Channel() channel.task_id = task_id channel.channel_id = channel_info.get("channel_id") channel.channel_number = channel_info.get("channel_number") channel.organization_id = channel_info.get("organization_id") channel.device_id = channel_info.get("device_id") channel.is_platform = channel_info.get("is_platform") channel.platform_id = channel_info.get("platform_id") channel.platform_host = channel_info.get("platform_host") channel.platform_port = channel_info.get("platform_port") channel.platform_user = channel_info.get("platform_user") channel.platform_password = channel_info.get("platform_password") db.session.add(channel) # 创建 任务与检测项目关系表 items = form.items.data task_item_relationships = [] for k, v in items.items(): if v is not None: item = Item.query.filter_by(item_name=k).first() if not item: msg = "item name not exist: {}".format(k) return render_response(code=-1, userdata=userdata, msg=msg) relationship = TaskItemRelationship(task_id=task.id, item_id=item.id, threshold=v) task_item_relationships.append(relationship) task.items = task_item_relationships # 添加任务到 任务调度器 if int(task.task_type) == 1: # 如果为 一次执行 try: time_str = "{} {}:{}".format(form.task_start_date.data, task.hours, task.minutes) run_date = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M") # if run_date.timestamp() < datetime.datetime.now().timestamp(): # 设置 misfire_grace_time # if -1 < datetime.datetime.now().timestamp() - run_date.timestamp() < 120: # run_date = datetime.datetime.now() + datetime.timedelta(seconds=1) # else: # msg = "task run time is missed." # 执行时间已经错过 # return render_response(code=-1, msg=msg, userdata=userdata) except Exception as e: logger.error("update task time error:{}".format(e)) msg = "time format error: {}".format(e) return render_response(code=-1, msg=msg, userdata=userdata) # 添加新的任务,旧的任务被覆盖。 job = scheduler.add_job(id=task_id, func=task_job, args=(task_id, ), replace_existing=True, trigger='date', run_date=run_date) else: # APScheduler day_of_week 从0开始,添加时需要减一。 day_of_weeks = task.day_of_week or None if day_of_weeks and type(day_of_weeks) == str: day_of_weeks = list( map(lambda x: int(x) - 1, task.day_of_week.split(","))) day_of_weeks = ",".join(map(str, day_of_weeks)) # 添加新的任务,旧的任务被覆盖。 job = scheduler.add_job(id=task_id, func=task_job, args=(task_id, ), replace_existing=True, trigger='cron', day=task.day_of_month, day_of_week=day_of_weeks or None, hour=task.hours, minute=task.minutes) # if job.next_run_time < datetime.datetime.now(): # pass try: db.session.add(task) db.session.commit() except IntegrityError as e: db.session.rollback() try: scheduler.remove_job(id=task.id) except: pass logger.error("update task error", e) return render_response(code=-1, msg='Integrity error.', userdata=userdata) except Exception as e: db.session.rollback() try: scheduler.remove_job(id=task.id) except: pass logger.error("update task error", e) return render_response(code=-1, msg='database error', userdata=userdata) msg = "next run time: {}".format(job.next_run_time) return render_response(code=0, userdata=userdata, msg=msg)
def start_send_email_task(): running_job = scheduler.get_job('send_email_task') if running_job: scheduler.remove_job('send_email_task') scheduler.add_job('send_email_task', send_email_task)