Merge branch 'master' into v0.3.1
commit
4d03b154ee
|
@ -0,0 +1,2 @@
|
||||||
|
node_modules
|
||||||
|
.git
|
14
Dockerfile
14
Dockerfile
|
@ -1,23 +1,31 @@
|
||||||
# docker run -d -p 8000:8000 alseambusher/crontab-ui
|
# docker run -d -p 8000:8000 alseambusher/crontab-ui
|
||||||
FROM alpine:3.5
|
FROM alpine:3.5
|
||||||
|
|
||||||
|
RUN mkdir /crontab-ui; touch /etc/crontabs/root; chmod +x /etc/crontabs/root
|
||||||
|
|
||||||
|
WORKDIR /crontab-ui
|
||||||
|
|
||||||
LABEL maintainer "@alseambusher"
|
LABEL maintainer "@alseambusher"
|
||||||
LABEL description "Crontab-UI docker"
|
LABEL description "Crontab-UI docker"
|
||||||
|
|
||||||
RUN apk --no-cache add \
|
RUN apk --no-cache add \
|
||||||
nodejs \
|
|
||||||
wget \
|
wget \
|
||||||
curl \
|
curl \
|
||||||
|
nodejs \
|
||||||
supervisor
|
supervisor
|
||||||
|
|
||||||
COPY supervisord.conf /etc/supervisord.conf
|
COPY supervisord.conf /etc/supervisord.conf
|
||||||
|
COPY . /crontab-ui
|
||||||
|
|
||||||
RUN npm install -g crontab-ui
|
RUN npm install
|
||||||
|
|
||||||
ENV HOST 0.0.0.0
|
ENV HOST 0.0.0.0
|
||||||
|
|
||||||
ENV PORT 8000
|
ENV PORT 8000
|
||||||
|
|
||||||
|
ENV CRON_PATH /etc/crontabs
|
||||||
|
ENV CRON_IN_DOCKER true
|
||||||
|
|
||||||
EXPOSE $PORT
|
EXPOSE $PORT
|
||||||
|
|
||||||
CMD ["supervisord", "-c", "/etc/supervisord.conf"]
|
CMD ["supervisord", "-c", "/etc/supervisord.conf"]
|
||||||
|
|
|
@ -34,8 +34,13 @@ If you need to autosave your changes to crontab directly:
|
||||||
crontab-ui --autosave
|
crontab-ui --autosave
|
||||||
|
|
||||||
Setting up with docker:
|
Setting up with docker:
|
||||||
|
|
||||||
docker run -d -p 8000:8000 alseambusher/crontab-ui
|
```bash
|
||||||
|
git clone https://github.com/alseambusher/crontab-ui.git
|
||||||
|
cd crontab-ui
|
||||||
|
docker build -t alseambusher/crontab-ui .
|
||||||
|
docker run -d -p 8000:8000 alseambusher/crontab-ui
|
||||||
|
```
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
|
|
34
crontab.js
34
crontab.js
|
@ -1,7 +1,14 @@
|
||||||
/*jshint esversion: 6*/
|
/*jshint esversion: 6*/
|
||||||
//load database
|
//load database
|
||||||
var Datastore = require('nedb');
|
var Datastore = require('nedb');
|
||||||
|
var path = require("path");
|
||||||
var db = new Datastore({ filename: __dirname + '/crontabs/crontab.db' });
|
var db = new Datastore({ filename: __dirname + '/crontabs/crontab.db' });
|
||||||
|
var cronPath = "/tmp";
|
||||||
|
|
||||||
|
if(process.env.CRON_PATH !== undefined) {
|
||||||
|
console.log(`Path to crond files set using env variables ${process.env.CRON_PATH}`);
|
||||||
|
cronPath = process.env.CRON_PATH;
|
||||||
|
}
|
||||||
|
|
||||||
db.loadDatabase(function (err) {
|
db.loadDatabase(function (err) {
|
||||||
if (err) throw err; // no hope, just terminate
|
if (err) throw err; // no hope, just terminate
|
||||||
|
@ -76,9 +83,9 @@ exports.set_crontab = function(env_vars, callback){
|
||||||
}
|
}
|
||||||
tabs.forEach(function(tab){
|
tabs.forEach(function(tab){
|
||||||
if(!tab.stopped) {
|
if(!tab.stopped) {
|
||||||
let stderr = "/tmp/" + tab._id + ".stderr";
|
let stderr = path.join(cronPath, tab._id + ".stderr");
|
||||||
let stdout = "/tmp/" + tab._id + ".stdout";
|
let stdout = path.join(cronPath, tab._id + ".stdout");
|
||||||
let log_file = exports.log_folder + "/" + tab._id + ".log";
|
let log_file = path.join(exports.log_folder, tab._id + ".log");
|
||||||
|
|
||||||
if(tab.command[tab.command.length-1] != ";") // add semicolon
|
if(tab.command[tab.command.length-1] != ";") // add semicolon
|
||||||
tab.command +=";";
|
tab.command +=";";
|
||||||
|
@ -108,14 +115,21 @@ exports.set_crontab = function(env_vars, callback){
|
||||||
|
|
||||||
fs.writeFile(exports.env_file, env_vars, function(err) {
|
fs.writeFile(exports.env_file, env_vars, function(err) {
|
||||||
if (err) callback(err);
|
if (err) callback(err);
|
||||||
|
// In docker we're running as the root user, so we need to write the file as root and not crontab
|
||||||
fs.writeFile("/tmp/crontab", crontab_string, function(err) {
|
var fileName = "crontab"
|
||||||
|
if(process.env.CRON_IN_DOCKER !== undefined) {
|
||||||
|
fileName = "root"
|
||||||
|
}
|
||||||
|
fs.writeFile(path.join(cronPath, fileName), crontab_string, function(err) {
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
|
/// In docker we're running crond using busybox implementation of crond
|
||||||
exec("crontab /tmp/crontab", function(err) {
|
/// It is launched as part of the container startup process, so no need to run it again
|
||||||
if (err) return callback(err);
|
if(process.env.CRON_IN_DOCKER === undefined) {
|
||||||
else callback();
|
exec("crontab " + path.join(cronPath, "crontab"), function(err) {
|
||||||
});
|
if (err) return callback(err);
|
||||||
|
else callback();
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,478 @@
|
||||||
|
{
|
||||||
|
"name": "crontab-ui",
|
||||||
|
"version": "0.2.9",
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"dependencies": {
|
||||||
|
"accepts": {
|
||||||
|
"version": "1.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
|
||||||
|
"integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo="
|
||||||
|
},
|
||||||
|
"acorn": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
|
||||||
|
"integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
|
||||||
|
},
|
||||||
|
"amdefine": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
|
||||||
|
},
|
||||||
|
"array-flatten": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
|
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
||||||
|
},
|
||||||
|
"ast-types": {
|
||||||
|
"version": "0.8.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz",
|
||||||
|
"integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI="
|
||||||
|
},
|
||||||
|
"async": {
|
||||||
|
"version": "0.2.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
|
||||||
|
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
|
||||||
|
},
|
||||||
|
"base62": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ="
|
||||||
|
},
|
||||||
|
"binary-search-tree": {
|
||||||
|
"version": "0.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz",
|
||||||
|
"integrity": "sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q="
|
||||||
|
},
|
||||||
|
"body-parser": {
|
||||||
|
"version": "1.17.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz",
|
||||||
|
"integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4="
|
||||||
|
},
|
||||||
|
"busboy": {
|
||||||
|
"version": "0.2.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
|
||||||
|
"integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM="
|
||||||
|
},
|
||||||
|
"bytes": {
|
||||||
|
"version": "2.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
|
||||||
|
"integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk="
|
||||||
|
},
|
||||||
|
"connect-busboy": {
|
||||||
|
"version": "0.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/connect-busboy/-/connect-busboy-0.0.2.tgz",
|
||||||
|
"integrity": "sha1-rFyclmchcYheV2xmsr/ZXTuxEJc="
|
||||||
|
},
|
||||||
|
"content-disposition": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
|
||||||
|
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
|
||||||
|
},
|
||||||
|
"content-type": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0="
|
||||||
|
},
|
||||||
|
"cookie": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
|
||||||
|
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
|
||||||
|
},
|
||||||
|
"cookie-signature": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
|
},
|
||||||
|
"core-util-is": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||||
|
},
|
||||||
|
"cron-parser": {
|
||||||
|
"version": "2.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.4.1.tgz",
|
||||||
|
"integrity": "sha512-b5IKyY/Dqyjfnnog15TsIMxshVmRXb298FQ5+Wfqe87ZImimZ+E/GFMISGeIvzuJOvQoESbSU6lYhIh3SbA2/w=="
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
|
||||||
|
"integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4="
|
||||||
|
},
|
||||||
|
"define-properties": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ="
|
||||||
|
},
|
||||||
|
"depd": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM="
|
||||||
|
},
|
||||||
|
"destroy": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
||||||
|
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
||||||
|
},
|
||||||
|
"dicer": {
|
||||||
|
"version": "0.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
|
||||||
|
"integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8="
|
||||||
|
},
|
||||||
|
"ee-first": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
|
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
||||||
|
},
|
||||||
|
"ejs": {
|
||||||
|
"version": "2.5.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz",
|
||||||
|
"integrity": "sha1-R5Y2v6P+Ox3r1SCH8KyyBLTxnIg="
|
||||||
|
},
|
||||||
|
"encodeurl": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA="
|
||||||
|
},
|
||||||
|
"es3ify": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz",
|
||||||
|
"integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E="
|
||||||
|
},
|
||||||
|
"escape-html": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
||||||
|
},
|
||||||
|
"esmangle-evaluator": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY="
|
||||||
|
},
|
||||||
|
"esprima-fb": {
|
||||||
|
"version": "3001.1.0-dev-harmony-fb",
|
||||||
|
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
|
||||||
|
"integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE="
|
||||||
|
},
|
||||||
|
"etag": {
|
||||||
|
"version": "1.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz",
|
||||||
|
"integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE="
|
||||||
|
},
|
||||||
|
"express": {
|
||||||
|
"version": "4.15.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz",
|
||||||
|
"integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI="
|
||||||
|
},
|
||||||
|
"falafel": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ="
|
||||||
|
},
|
||||||
|
"finalhandler": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk="
|
||||||
|
},
|
||||||
|
"foreach": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
|
||||||
|
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
|
||||||
|
},
|
||||||
|
"forwarded": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz",
|
||||||
|
"integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M="
|
||||||
|
},
|
||||||
|
"fresh": {
|
||||||
|
"version": "0.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz",
|
||||||
|
"integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44="
|
||||||
|
},
|
||||||
|
"http-errors": {
|
||||||
|
"version": "1.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz",
|
||||||
|
"integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc="
|
||||||
|
},
|
||||||
|
"iconv-lite": {
|
||||||
|
"version": "0.4.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
|
||||||
|
"integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es="
|
||||||
|
},
|
||||||
|
"immediate": {
|
||||||
|
"version": "3.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
|
||||||
|
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||||
|
},
|
||||||
|
"inline-process-browser": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI="
|
||||||
|
},
|
||||||
|
"ipaddr.js": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz",
|
||||||
|
"integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew="
|
||||||
|
},
|
||||||
|
"is-nan": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.2.1.tgz",
|
||||||
|
"integrity": "sha1-n69ltvttskt/XAYoR16nH5iEAeI="
|
||||||
|
},
|
||||||
|
"isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||||
|
},
|
||||||
|
"jstransform": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs="
|
||||||
|
},
|
||||||
|
"lie": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz",
|
||||||
|
"integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o="
|
||||||
|
},
|
||||||
|
"localforage": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.5.0.tgz",
|
||||||
|
"integrity": "sha1-a5lOGbVmEfqF3zmS3zl6xKtm6BU="
|
||||||
|
},
|
||||||
|
"media-typer": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
|
||||||
|
},
|
||||||
|
"merge-descriptors": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
|
||||||
|
},
|
||||||
|
"methods": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
|
||||||
|
},
|
||||||
|
"mime": {
|
||||||
|
"version": "1.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz",
|
||||||
|
"integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA="
|
||||||
|
},
|
||||||
|
"mime-db": {
|
||||||
|
"version": "1.27.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
|
||||||
|
"integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE="
|
||||||
|
},
|
||||||
|
"mime-types": {
|
||||||
|
"version": "2.1.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
|
||||||
|
"integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0="
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "0.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||||
|
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
|
||||||
|
},
|
||||||
|
"mkdirp": {
|
||||||
|
"version": "0.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
||||||
|
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM="
|
||||||
|
},
|
||||||
|
"moment": {
|
||||||
|
"version": "2.18.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz",
|
||||||
|
"integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8="
|
||||||
|
},
|
||||||
|
"moment-timezone": {
|
||||||
|
"version": "0.5.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz",
|
||||||
|
"integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A="
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||||
|
},
|
||||||
|
"nedb": {
|
||||||
|
"version": "1.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz",
|
||||||
|
"integrity": "sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg="
|
||||||
|
},
|
||||||
|
"negotiator": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
||||||
|
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
|
||||||
|
},
|
||||||
|
"nodemailer": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.0.1.tgz",
|
||||||
|
"integrity": "sha1-uVhksH+s7oKH6CMu/9bx1W7HWrI="
|
||||||
|
},
|
||||||
|
"object-keys": {
|
||||||
|
"version": "1.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
|
||||||
|
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
|
||||||
|
},
|
||||||
|
"on-finished": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
||||||
|
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc="
|
||||||
|
},
|
||||||
|
"parseurl": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz",
|
||||||
|
"integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY="
|
||||||
|
},
|
||||||
|
"path-to-regexp": {
|
||||||
|
"version": "0.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
|
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||||
|
},
|
||||||
|
"private": {
|
||||||
|
"version": "0.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz",
|
||||||
|
"integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE="
|
||||||
|
},
|
||||||
|
"proxy-addr": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz",
|
||||||
|
"integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM="
|
||||||
|
},
|
||||||
|
"qs": {
|
||||||
|
"version": "6.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
|
||||||
|
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
|
||||||
|
},
|
||||||
|
"range-parser": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
|
||||||
|
},
|
||||||
|
"raw-body": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz",
|
||||||
|
"integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y="
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.1.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
|
||||||
|
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
|
||||||
|
},
|
||||||
|
"recast": {
|
||||||
|
"version": "0.10.43",
|
||||||
|
"resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz",
|
||||||
|
"integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=",
|
||||||
|
"dependencies": {
|
||||||
|
"esprima-fb": {
|
||||||
|
"version": "15001.1001.0-dev-harmony-fb",
|
||||||
|
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
|
||||||
|
"integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk="
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.5.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
|
||||||
|
"integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"send": {
|
||||||
|
"version": "0.15.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz",
|
||||||
|
"integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=",
|
||||||
|
"dependencies": {
|
||||||
|
"mime": {
|
||||||
|
"version": "1.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
|
||||||
|
"integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"serve-static": {
|
||||||
|
"version": "1.12.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz",
|
||||||
|
"integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI="
|
||||||
|
},
|
||||||
|
"setprototypeof": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.1.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
|
||||||
|
"integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE="
|
||||||
|
},
|
||||||
|
"statuses": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
|
||||||
|
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
|
||||||
|
},
|
||||||
|
"streamsearch": {
|
||||||
|
"version": "0.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
|
||||||
|
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "0.10.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||||
|
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||||
|
},
|
||||||
|
"through": {
|
||||||
|
"version": "2.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||||
|
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
|
||||||
|
},
|
||||||
|
"through2": {
|
||||||
|
"version": "0.6.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
|
||||||
|
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
|
||||||
|
"dependencies": {
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.0.34",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
|
||||||
|
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type-is": {
|
||||||
|
"version": "1.6.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
|
||||||
|
"integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA="
|
||||||
|
},
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.4.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
|
||||||
|
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
|
||||||
|
},
|
||||||
|
"unpipe": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
|
||||||
|
},
|
||||||
|
"unreachable-branch-transform": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo="
|
||||||
|
},
|
||||||
|
"utils-merge": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg="
|
||||||
|
},
|
||||||
|
"vary": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz",
|
||||||
|
"integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc="
|
||||||
|
},
|
||||||
|
"xtend": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
|
||||||
|
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,9 +20,9 @@
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "latest"
|
"node": "latest"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"crontab-ui": "bin/crontab-ui.js",
|
"crontab-ui": "bin/crontab-ui.js",
|
||||||
"crontab-ui-mailer": "bin/crontab-ui-mailer.js"
|
"crontab-ui-mailer": "bin/crontab-ui-mailer.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
nodaemon=true
|
nodaemon=true
|
||||||
|
|
||||||
[program:crontab]
|
[program:crontab]
|
||||||
command=crond -l 2 -f
|
command=crond -l 2 -f -c %(ENV_CRON_PATH)s
|
||||||
stderr_logfile = /var/log/crontab-stderr.log
|
stderr_logfile = /var/log/crontab-stderr.log
|
||||||
stdout_logfile = /var/log/crontab-stdout.log
|
stdout_logfile = /var/log/crontab-stdout.log
|
||||||
|
|
||||||
[program:crontabui]
|
[program:crontabui]
|
||||||
command=crontab-ui
|
command=node /crontab-ui/app.js
|
||||||
stderr_logfile = /var/log/crontabui-stderr.log
|
stderr_logfile = /var/log/crontabui-stderr.log
|
||||||
stdout_logfile = /var/log/crontabui-stdout.log
|
stdout_logfile = /var/log/crontabui-stdout.log
|
Loading…
Reference in New Issue