Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

46 rader
1.4 KiB

  1. const fs = require('fs-extra');
  2. const { isEmpty } = require('./util');
  3. const config = require('./config');
  4. const debug = require('debug')('server-connect:cron');
  5. exports.start = () => {
  6. if (!config.cron || isEmpty('app/schedule')) return;
  7. debug('Start schedule');
  8. processEntries('app/schedule');
  9. };
  10. function processEntries(path) {
  11. const schedule = require('node-schedule');
  12. const entries = fs.readdirSync(path, { withFileTypes: true });
  13. for (let entry of entries) {
  14. if (entry.isFile() && entry.name.endsWith('.json')) {
  15. try {
  16. const job = fs.readJSONSync(`${path}/${entry.name}`);
  17. const rule = job.settings.options.rule;
  18. debug(`Adding schedule ${entry.name}`);
  19. if (rule == '@reboot') {
  20. setImmediate(exec(job.exec));
  21. } else {
  22. schedule.scheduleJob(rule, exec(job.exec))
  23. }
  24. } catch (e) {
  25. console.error(e);
  26. }
  27. } else if (entry.isDirectory()) {
  28. processEntries(`${path}/${entry.name}`);
  29. }
  30. }
  31. }
  32. function exec(action) {
  33. return async () => {
  34. const App = require('../core/app');
  35. const app = new App({ params: {}, session: {}, cookies: {}, signedCookies: {}, query: {}, headers: {} });
  36. return app.define(action, true);
  37. }
  38. }