UNPKG

mecano

Version:

Common functions for system deployment.

70 lines (66 loc) 1.81 kB
// Generated by CoffeeScript 1.11.1 var regexp, wrap; module.exports = function(options, callback) { var crontab, jobs, ref, status; if (!(((ref = options.cmd) != null ? ref.length : void 0) > 0)) { return callback(new Error('valid cmd is required')); } if (options.user != null) { options.log({ message: "Using user " + options.user, level: 'INFO', module: 'mecano/cron/remove' }); crontab = "crontab -u " + options.user; } else { options.log({ message: "Using default user", level: 'INFO', module: 'mecano/cron/remove' }); crontab = "crontab"; } status = false; jobs = []; return this.execute({ cmd: crontab + " -l", shy: true }, function(err, _, stdout, stderr) { var i, j, job, len, myjob, regex; if (err) { throw err; } if (/^no crontab for/.test(stderr)) { throw Error('User crontab not found'); } myjob = options.when ? regexp.escape(options.when) : '.*'; myjob += regexp.escape(" " + options.cmd); regex = new RegExp(myjob); jobs = stdout.trim().split('\n'); for (i = j = 0, len = jobs.length; j < len; i = ++j) { job = jobs[i]; if (!regex.test(job)) { continue; } options.log({ message: "Job '" + job + "' matches. Removing from list", level: 'WARN', module: 'mecano/cron/remove' }); status = true; jobs.splice(i, 1); } return options.log({ message: "No Job matches. Skipping", level: 'INFO', module: 'mecano/cron/remove' }); }).execute({ cmd: crontab + " - <<EOF\n" + (jobs.join('\n')) + "\nEOF", "if": function() { return status; } }).then(callback); }; regexp = require('../misc').regexp; wrap = require('../misc/wrap');