diff --git a/extra/cli.js b/extra/cli.js index 7f1228373..bdfa6ec99 100644 --- a/extra/cli.js +++ b/extra/cli.js @@ -1,5 +1,8 @@ #!/usr/bin/env node +const path = require("path"); +const args = require("args-parser")(process.argv); +// Set the data directory if (!process.env.DATA_DIR) { if (process.platform === "win32") { process.env.DATA_DIR = process.env.LOCALAPPDATA + "\\uptime-kuma\\"; @@ -15,4 +18,58 @@ if (!process.env.DATA_DIR) { } } -require("../server/server"); +// Change the working directory to the root of the project, so it can read the dist folder +process.chdir(path.join(__dirname, "..")); + +if (args.run) { + require("../server/server"); + +} else if (args.installService) { + + if (process.platform === "win32") { + let Service = require("node-windows").Service; + + // Create a new service object + let svc = new Service({ + name: "Uptime Kuma", + description: "Uptime Kuma is an easy-to-use self-hosted monitoring tool.", + script: "C:\\path\\to\\helloworld.js", + nodeOptions: [ + "--harmony", + "--max_old_space_size=4096" + ] + //, workingDirectory: '...' + //, allowServiceLogon: true + }); + + // Listen for the "install" event, which indicates the + // process is available as a service. + svc.on("install", function () { + svc.start(); + }); + + svc.install(); + } else if (process.platform === "linux") { + + } else { + console.error("Unable to install service on platform: " + process.platform); + process.exit(1); + } + +} else if (args.version || args.v) { + const version = require("../package.json").version; + console.log("Uptime Kuma version: " + version); + +} else { + console.log(`Usage: uptime-kuma [options] + +Options: + --install-service Install Uptime Kuma service (Windows and Linux only) + --uninstall-service Uninstall Uptime Kuma service + --run Run Uptime Kuma directly in the terminal + --data-dir="your path" Set the data directory + --version Print the version + --help Print this help + `); +} + diff --git a/package-lock.json b/package-lock.json index ca8e87192..ddee43b57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,6 +53,7 @@ "nanoid": "~3.3.4", "node-cloudflared-tunnel": "~1.0.9", "node-radius-client": "~1.0.0", + "node-windows": "^1.0.0-beta.8", "nodemailer": "~6.6.5", "nostr-tools": "^1.13.1", "notp": "~2.0.3", @@ -14645,6 +14646,15 @@ "node": ">= 10" } }, + "node_modules/node-windows": { + "version": "1.0.0-beta.8", + "resolved": "https://registry.npmjs.org/node-windows/-/node-windows-1.0.0-beta.8.tgz", + "integrity": "sha512-uLekXnSeem3nW5escID224Fd0U/1VtvE796JpSpOY+c73Cslz/Qn2WUHRJyPQJEMrNGAy/FMRFjjhh4z1alZTA==", + "dependencies": { + "xml": "1.0.1", + "yargs": "^17.5.1" + } + }, "node_modules/nodemailer": { "version": "6.6.5", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.5.tgz", @@ -19019,6 +19029,11 @@ } } }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + }, "node_modules/xmlbuilder": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", diff --git a/package.json b/package.json index e5aff73ba..f95bf1c62 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,7 @@ "nanoid": "~3.3.4", "node-cloudflared-tunnel": "~1.0.9", "node-radius-client": "~1.0.0", + "node-windows": "^1.0.0-beta.8", "nodemailer": "~6.6.5", "nostr-tools": "^1.13.1", "notp": "~2.0.3",