Skip to content

Commit

Permalink
add msg.stop handler and docs, msg.start restarts process as per exis…
Browse files Browse the repository at this point in the history
…ting doc
  • Loading branch information
Giovanni Marzot committed Jul 20, 2023
1 parent 74aeb2d commit 10d9efe
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 8 deletions.
2 changes: 2 additions & 0 deletions utility/daemon/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ Setting `msg.kill` to a signal name (e.g. SIGINT, SIGHUP) will stop the process

Sending `msg.start` will also re-start the process. Additional arguments can be specified in `msg.args`.

Sending `msg.stop` will stop the process and prevent automatic re-start until reset with `msg.start`.

**Note:** Some applications will automatically buffer lines of output. It is advisable to turn off this behaviour.
For example, if running a Python app, the `-u` parameter will stop the output being buffered.

Expand Down
31 changes: 23 additions & 8 deletions utility/daemon/daemon.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ module.exports = function(RED) {
this.op = n.op;
this.redo = n.redo;
this.running = false;
this.stopped = false;
this.closer = n.closer || "SIGKILL";
this.autorun = true;
if (n.autorun === false) { this.autorun = false; }
Expand All @@ -32,16 +33,29 @@ module.exports = function(RED) {

function inputlistener(msg) {
if (msg != null) {
if (msg.hasOwnProperty("kill") && node.running) {
if (msg.hasOwnProperty("stop")) {
this.stopped = true;
if (node.running) {
node.child.kill("SIGINT");
}
node.debug(node.cmd+" stopped by msg");
node.status({fill:"grey",shape:"ring",text:RED._("daemon.status.stopped")});
}
else if (msg.hasOwnProperty("kill") && node.running) {
if (typeof msg.kill !== "string" || msg.kill.length === 0 || !msg.kill.toUpperCase().startsWith("SIG") ) { msg.kill = "SIGINT"; }
node.child.kill(msg.kill.toUpperCase());
}
else if (msg.hasOwnProperty("start") && !node.running) {
let args = "";
if (msg.hasOwnProperty("args") && msg.args.length > 0) {
args = parseArgs(msg.args.trim());
else if (msg.hasOwnProperty("start")) {
this.stopped = false;
if (!node.running) {
let args = "";
if (msg.hasOwnProperty("args") && msg.args.length > 0) {
args = parseArgs(msg.args.trim());
}
runit(args);
} else {
node.child.kill("SIGINT");
}
runit(args);
}
else {
if (!Buffer.isBuffer(msg.payload)) {
Expand Down Expand Up @@ -111,7 +125,8 @@ module.exports = function(RED) {
var rc = code;
if (code === null) { rc = signal; }
node.send([null,null,{payload:rc}]);
node.status({fill:"red",shape:"ring",text:RED._("daemon.status.stopped")});
const color = node.stopped ? "grey" : "red";
node.status({fill:color,shape:"ring",text:RED._("daemon.status.stopped")});
});

node.child.on('error', function (err) {
Expand All @@ -138,7 +153,7 @@ module.exports = function(RED) {

if (node.redo === true) {
var loop = setInterval( function() {
if (!node.running) {
if (!node.running && !node.stopped) {
node.warn(RED._("daemon.errors.restarting") + " : " + node.cmd);
runit();
}
Expand Down

0 comments on commit 10d9efe

Please sign in to comment.