var promise = new Promise((resolve, reject) => {
     log.info('BACKGROUND JOB : SCHEDULE : EXECUTE : Executing schedules.');
     startJobs()
         .then(() => {
             stopJobs()
                 .then(resolve)
                 .catch(reject);
         })
         .catch(reject);
 });
    var promise = new Promise((resolve, reject) => {
        log.info('BACKGROUND JOB : SCHEDULE : START : Starting schedule background job.');
        if (job) {
            cleanup();
        }

        job = new CronJob(cronSchedule
            , executeHandler
            , cleanup
            , true /* Start the job right now */
        );

        executeHandler();

        resolve();
    });
    var promise = new Promise((resolve, reject) => {
        log.info('BACKGROUND JOB : SCHEDULE : STARTJOBS : Stopping jobs.');
        scheduleDAO.SchedulesToStop(new Date())
            .then((schedules) => {
                schedules.forEach((schedule) => {
                    scheduleService.stop(schedule)
                        .then(() => {
                            delete runningSchedules[schedule.Id];
                        }).catch((err) => {
                            log.error('BACKGROUND JOB : SCHEDULE : STOPJOBS : ' + err);
                            return reject(err);
                        });
                });
            })
            .catch(reject);

        return resolve();
    });
    var promise = new Promise((resolve, reject) => {
        log.info('BACKGROUND JOB : SCHEDULE : STARTJOBS : Running jobs.');
        scheduleDAO.SchedulesFor(new Date())
            .then((schedules) => {
                schedules.forEach((schedule) => {
                    scheduleService.run(schedule)
                        .then(() => {
                            runningSchedules[schedule.Id] = true;
                        }).catch((err) => {
                            log.error('BACKGROUND JOB : SCHEDULE : STARTJOBS : ' + err);
                            return reject(err);
                        });
                });
            })
            .catch(reject);

        return resolve();
    });
    var promise = new Promise((resolve, reject) => {
        log.info('BACKGROUND JOB : SCHEDULE : CLEANUP : Cleaning up schedule background job.');
        if (job) {
            job.stop();
            job = undefined;
        }

        runningSchedules.forEach((schedule) => {
            schedule.cancel()
                .catch((err) => {
                    reject(err);
                });
        });

        runningSchedules = [];

        resolve();
    });
 .then(() => {
     log.info('BACKGROUND JOB : SCHEDULE : START : DONE');
 })
 var promise = new Promise((resolve, reject) => {
     log.info('BACKGROUND JOB : SCHEDULE : STOP : Stopping schedule background job.');
     cleanup()
         .then(resolve)
         .catch(reject);
 });