mecano
Version:
Common functions for system deployment.
70 lines (66 loc) • 1.81 kB
JavaScript
// 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');