Use docker containers to run node-red and pm2 to manage the application. After running for a while, node-red service stops

Use docker containers to run node-red and pm2 to manage the application. After running for a while, node-red service stops. node-red version is 3.0.2. The following is the error message:

11:00:22 0|red  | 21 Nov 11:00:22 - [warn] [function:模拟返回报文] [object Object]
11:58:01 0|red  | getAndCheckSign {} 2024-11-21T11:58:01.197Z
11:58:01 0|red  | TypeError: Callback must be a function. Received <ref *1> ChildProcess {
11:58:01 0|red  |   _events: [Object: null prototype] {
11:58:01 0|red  |     close: [Function: exithandler],
11:58:01 0|red  |     error: [Function: errorhandler]
11:58:01 0|red  |   },
11:58:01 0|red  |   _eventsCount: 2,
11:58:01 0|red  |   _maxListeners: undefined,
11:58:01 0|red  |   _closesNeeded: 3,
11:58:01 0|red  |   _closesGot: 0,
11:58:01 0|red  |   connected: false,
11:58:01 0|red  |   signalCode: null,
11:58:01 0|red  |   exitCode: null,
11:58:01 0|red  |   killed: false,
11:58:01 0|red  |   spawnfile: '/bin/sh',
11:58:01 0|red  |   _handle: Process {
11:58:01 0|red  |     onexit: [Function (anonymous)],
11:58:01 0|red  |     pid: 42,
11:58:01 0|red  |     [Symbol(owner_symbol)]: [Circular *1]
11:58:01 0|red  |   },
11:58:01 0|red  |   spawnargs: [ '/bin/sh', '-c', 'pm2 stop red.js' ],
11:58:01 0|red  |   pid: 42,
11:58:01 0|red  |   stdio: [
11:58:01 0|red  |     <ref *2> Socket {
11:58:01 0|red  |       connecting: false,
11:58:01 0|red  |       _hadError: false,
11:58:01 0|red  |       _parent: null,
11:58:01 0|red  |       _host: null,
11:58:01 0|red  |       _readableState: [ReadableState],
11:58:01 0|red  |       _events: [Object: null prototype],
11:58:01 0|red  |       _eventsCount: 1,
11:58:01 0|red  |       _maxListeners: undefined,
11:58:01 0|red  |       _writableState: [WritableState],
11:58:01 0|red  |       allowHalfOpen: false,
11:58:01 0|red  |       _sockname: null,
11:58:01 0|red  |       _pendingData: null,
11:58:01 0|red  |       _pendingEncoding: '',
11:58:01 0|red  |       server: null,
11:58:01 0|red  |       _server: null,
11:58:01 0|red  |       [Symbol(async_id_symbol)]: 4587,
11:58:01 0|red  |       [Symbol(kHandle)]: [Pipe],
11:58:01 0|red  |       [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |       [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |       [Symbol(timeout)]: null,
11:58:01 0|red  |       [Symbol(kBuffer)]: null,
11:58:01 0|red  |       [Symbol(kBufferCb)]: null,
11:58:01 0|red  |       [Symbol(kBufferGen)]: null,
11:58:01 0|red  |       [Symbol(kCapture)]: false,
11:58:01 0|red  |       [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |       [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |     },
11:58:01 0|red  |     <ref *3> Socket {
11:58:01 0|red  |       connecting: false,
11:58:01 0|red  |       _hadError: false,
11:58:01 0|red  |       _parent: null,
11:58:01 0|red  |       _host: null,
11:58:01 0|red  |       _readableState: [ReadableState],
11:58:01 0|red  |       _events: [Object: null prototype],
11:58:01 0|red  |       _eventsCount: 3,
11:58:01 0|red  |       _maxListeners: undefined,
11:58:01 0|red  |       _writableState: [WritableState],
11:58:01 0|red  |       allowHalfOpen: false,
11:58:01 0|red  |       _sockname: null,
11:58:01 0|red  |       _pendingData: null,
11:58:01 0|red  |       _pendingEncoding: '',
11:58:01 0|red  |       server: null,
11:58:01 0|red  |       _server: null,
11:58:01 0|red  |       [Symbol(async_id_symbol)]: 4588,
11:58:01 0|red  |       [Symbol(kHandle)]: [Pipe],
11:58:01 0|red  |       [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |       [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |       [Symbol(timeout)]: null,
11:58:01 0|red  |       [Symbol(kBuffer)]: null,
11:58:01 0|red  |       [Symbol(kBufferCb)]: null,
11:58:01 0|red  |       [Symbol(kBufferGen)]: null,
11:58:01 0|red  |       [Symbol(kCapture)]: false,
11:58:01 0|red  |       [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |       [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |     },
11:58:01 0|red  |     <ref *4> Socket {
11:58:01 0|red  |       connecting: false,
11:58:01 0|red  |       _hadError: false,
11:58:01 0|red  |       _parent: null,
11:58:01 0|red  |       _host: null,
11:58:01 0|red  |       _readableState: [ReadableState],
11:58:01 0|red  |       _events: [Object: null prototype],
11:58:01 0|red  |       _eventsCount: 3,
11:58:01 0|red  |       _maxListeners: undefined,
11:58:01 0|red  |       _writableState: [WritableState],
11:58:01 0|red  |       allowHalfOpen: false,
11:58:01 0|red  |       _sockname: null,
11:58:01 0|red  |       _pendingData: null,
11:58:01 0|red  |       _pendingEncoding: '',
11:58:01 0|red  |       server: null,
11:58:01 0|red  |       _server: null,
11:58:01 0|red  |       [Symbol(async_id_symbol)]: 4589,
11:58:01 0|red  |       [Symbol(kHandle)]: [Pipe],
11:58:01 0|red  |       [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |       [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |       [Symbol(timeout)]: null,
11:58:01 0|red  |       [Symbol(kBuffer)]: null,
11:58:01 0|red  |       [Symbol(kBufferCb)]: null,
11:58:01 0|red  |       [Symbol(kBufferGen)]: null,
11:58:01 0|red  |       [Symbol(kCapture)]: false,
11:58:01 0|red  |       [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |       [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |     }
11:58:01 0|red  |   ],
11:58:01 0|red  |   [Symbol(kCapture)]: false
11:58:01 0|red  | }
11:58:01 0|red  |     at setTimeout (node:timers:141:3)
11:58:01 0|red  |     at Object.getAndCheckSign (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/projects.js:109:17)
11:58:01 0|red  |     at Timeout._onTimeout (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/comms.js:248:26)
11:58:01 0|red  |     at listOnTimeout (node:internal/timers:559:17)
11:58:01 0|red  |     at processTimers (node:internal/timers:502:7) {
11:58:01 0|red  |   code: 'ERR_INVALID_CALLBACK'
11:58:01 0|red  | }
11:58:01 0|red  | err<><><><><><>
11:58:01 0|red  | TypeError: Callback must be a function. Received <ref *1> ChildProcess {
11:58:01 0|red  |   _events: [Object: null prototype] {
11:58:01 0|red  |     close: [Function: exithandler],
11:58:01 0|red  |     error: [Function: errorhandler]
11:58:01 0|red  |   },
11:58:01 0|red  |   _eventsCount: 2,
11:58:01 0|red  |   _maxListeners: undefined,
11:58:01 0|red  |   _closesNeeded: 3,
11:58:01 0|red  |   _closesGot: 0,
11:58:01 0|red  |   connected: false,
11:58:01 0|red  |   signalCode: null,
11:58:01 0|red  |   exitCode: null,
11:58:01 0|red  |   killed: false,
11:58:01 0|red  |   spawnfile: '/bin/sh',
11:58:01 0|red  |   _handle: Process {
11:58:01 0|red  |     onexit: [Function (anonymous)],
11:58:01 0|red  |     pid: 49,
11:58:01 0|red  |     [Symbol(owner_symbol)]: [Circular *1]
11:58:01 0|red  |   },
11:58:01 0|red  |   spawnargs: [ '/bin/sh', '-c', 'pm2 stop red.js' ],
11:58:01 0|red  |   pid: 49,
11:58:01 0|red  |   stdin: <ref *2> Socket {
11:58:01 0|red  |     connecting: false,
11:58:01 0|red  |     _hadError: false,
11:58:01 0|red  |     _parent: null,
11:58:01 0|red  |     _host: null,
11:58:01 0|red  |     _readableState: ReadableState {
11:58:01 0|red  |       objectMode: false,
11:58:01 0|red  |       highWaterMark: 16384,
11:58:01 0|red  |       buffer: BufferList { head: null, tail: null, length: 0 },
11:58:01 0|red  |       length: 0,
11:58:01 0|red  |       pipes: [],
11:58:01 0|red  |       flowing: null,
11:58:01 0|red  |       ended: false,
11:58:01 0|red  |       endEmitted: false,
11:58:01 0|red  |       reading: false,
11:58:01 0|red  |       constructed: true,
11:58:01 0|red  |       sync: true,
11:58:01 0|red  |       needReadable: false,
11:58:01 0|red  |       emittedReadable: false,
11:58:01 0|red  |       readableListening: false,
11:58:01 0|red  |       resumeScheduled: false,
11:58:01 0|red  |       errorEmitted: false,
11:58:01 0|red  |       emitClose: false,
11:58:01 0|red  |       autoDestroy: true,
11:58:01 0|red  |       destroyed: false,
11:58:01 0|red  |       errored: null,
11:58:01 0|red  |       closed: false,
11:58:01 0|red  |       closeEmitted: false,
11:58:01 0|red  |       defaultEncoding: 'utf8',
11:58:01 0|red  |       awaitDrainWriters: null,
11:58:01 0|red  |       multiAwaitDrain: false,
11:58:01 0|red  |       readingMore: false,
11:58:01 0|red  |       dataEmitted: false,
11:58:01 0|red  |       decoder: null,
11:58:01 0|red  |       encoding: null,
11:58:01 0|red  |       readable: false,
11:58:01 0|red  |       [Symbol(kPaused)]: null
11:58:01 0|red  |     },
11:58:01 0|red  |     _events: [Object: null prototype] { end: [Function: onReadableStreamEnd] },
11:58:01 0|red  |     _eventsCount: 1,
11:58:01 0|red  |     _maxListeners: undefined,
11:58:01 0|red  |     _writableState: WritableState {
11:58:01 0|red  |       objectMode: false,
11:58:01 0|red  |       highWaterMark: 16384,
11:58:01 0|red  |       finalCalled: false,
11:58:01 0|red  |       needDrain: false,
11:58:01 0|red  |       ending: false,
11:58:01 0|red  |       ended: false,
11:58:01 0|red  |       finished: false,
11:58:01 0|red  |       destroyed: false,
11:58:01 0|red  |       decodeStrings: false,
11:58:01 0|red  |       defaultEncoding: 'utf8',
11:58:01 0|red  |       length: 0,
11:58:01 0|red  |       writing: false,
11:58:01 0|red  |       corked: 0,
11:58:01 0|red  |       sync: true,
11:58:01 0|red  |       bufferProcessing: false,
11:58:01 0|red  |       onwrite: [Function: bound onwrite],
11:58:01 0|red  |       writecb: null,
11:58:01 0|red  |       writelen: 0,
11:58:01 0|red  |       afterWriteTickInfo: null,
11:58:01 0|red  |       buffered: [],
11:58:01 0|red  |       bufferedIndex: 0,
11:58:01 0|red  |       allBuffers: true,
11:58:01 0|red  |       allNoop: true,
11:58:01 0|red  |       pendingcb: 0,
11:58:01 0|red  |       constructed: true,
11:58:01 0|red  |       prefinished: false,
11:58:01 0|red  |       errorEmitted: false,
11:58:01 0|red  |       emitClose: false,
11:58:01 0|red  |       autoDestroy: true,
11:58:01 0|red  |       errored: null,
11:58:01 0|red  |       closed: false,
11:58:01 0|red  |       closeEmitted: false,
11:58:01 0|red  |       [Symbol(kOnFinished)]: []
11:58:01 0|red  |     },
11:58:01 0|red  |     allowHalfOpen: false,
11:58:01 0|red  |     _sockname: null,
11:58:01 0|red  |     _pendingData: null,
11:58:01 0|red  |     _pendingEncoding: '',
11:58:01 0|red  |     server: null,
11:58:01 0|red  |     _server: null,
11:58:01 0|red  |     [Symbol(async_id_symbol)]: 4595,
11:58:01 0|red  |     [Symbol(kHandle)]: Pipe { [Symbol(owner_symbol)]: [Circular *2] },
11:58:01 0|red  |     [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |     [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |     [Symbol(timeout)]: null,
11:58:01 0|red  |     [Symbol(kBuffer)]: null,
11:58:01 0|red  |     [Symbol(kBufferCb)]: null,
11:58:01 0|red  |     [Symbol(kBufferGen)]: null,
11:58:01 0|red  |     [Symbol(kCapture)]: false,
11:58:01 0|red  |     [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |     [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |   },
11:58:01 0|red  |   stdout: <ref *3> Socket {
11:58:01 0|red  |     connecting: false,
11:58:01 0|red  |     _hadError: false,
11:58:01 0|red  |     _parent: null,
11:58:01 0|red  |     _host: null,
11:58:01 0|red  |     _readableState: ReadableState {
11:58:01 0|red  |       objectMode: false,
11:58:01 0|red  |       highWaterMark: 16384,
11:58:01 0|red  |       buffer: BufferList { head: null, tail: null, length: 0 },
11:58:01 0|red  |       length: 0,
11:58:01 0|red  |       pipes: [],
11:58:01 0|red  |       flowing: true,
11:58:01 0|red  |       ended: false,
11:58:01 0|red  |       endEmitted: false,
11:58:01 0|red  |       reading: true,
11:58:01 0|red  |       constructed: true,
11:58:01 0|red  |       sync: false,
11:58:01 0|red  |       needReadable: true,
11:58:01 0|red  |       emittedReadable: false,
11:58:01 0|red  |       readableListening: false,
11:58:01 0|red  |       resumeScheduled: true,
11:58:01 0|red  |       errorEmitted: false,
11:58:01 0|red  |       emitClose: false,
11:58:01 0|red  |       autoDestroy: true,
11:58:01 0|red  |       destroyed: false,
11:58:01 0|red  |       errored: null,
11:58:01 0|red  |       closed: false,
11:58:01 0|red  |       closeEmitted: false,
11:58:01 0|red  |       defaultEncoding: 'utf8',
11:58:01 0|red  |       awaitDrainWriters: null,
11:58:01 0|red  |       multiAwaitDrain: false,
11:58:01 0|red  |       readingMore: false,
11:58:01 0|red  |       dataEmitted: false,
11:58:01 0|red  |       decoder: [StringDecoder],
11:58:01 0|red  |       encoding: 'utf8',
11:58:01 0|red  |       [Symbol(kPaused)]: false
11:58:01 0|red  |     },
11:58:01 0|red  |     _events: [Object: null prototype] {
11:58:01 0|red  |       end: [Function: onReadableStreamEnd],
11:58:01 0|red  |       close: [Function (anonymous)],
11:58:01 0|red  |       data: [Function: onChildStdout]
11:58:01 0|red  |     },
11:58:01 0|red  |     _eventsCount: 3,
11:58:01 0|red  |     _maxListeners: undefined,
11:58:01 0|red  |     _writableState: WritableState {
11:58:01 0|red  |       objectMode: false,
11:58:01 0|red  |       highWaterMark: 16384,
11:58:01 0|red  |       finalCalled: false,
11:58:01 0|red  |       needDrain: false,
11:58:01 0|red  |       ending: false,
11:58:01 0|red  |       ended: false,
11:58:01 0|red  |       finished: false,
11:58:01 0|red  |       destroyed: false,
11:58:01 0|red  |       decodeStrings: false,
11:58:01 0|red  |       defaultEncoding: 'utf8',
11:58:01 0|red  |       length: 0,
11:58:01 0|red  |       writing: false,
11:58:01 0|red  |       corked: 0,
11:58:01 0|red  |       sync: true,
11:58:01 0|red  |       bufferProcessing: false,
11:58:01 0|red  |       onwrite: [Function: bound onwrite],
11:58:01 0|red  |       writecb: null,
11:58:01 0|red  |       writelen: 0,
11:58:01 0|red  |       afterWriteTickInfo: null,
11:58:01 0|red  |       buffered: [],
11:58:01 0|red  |       bufferedIndex: 0,
11:58:01 0|red  |       allBuffers: true,
11:58:01 0|red  |       allNoop: true,
11:58:01 0|red  |       pendingcb: 0,
11:58:01 0|red  |       constructed: true,
11:58:01 0|red  |       prefinished: false,
11:58:01 0|red  |       errorEmitted: false,
11:58:01 0|red  |       emitClose: false,
11:58:01 0|red  |       autoDestroy: true,
11:58:01 0|red  |       errored: null,
11:58:01 0|red  |       closed: false,
11:58:01 0|red  |       closeEmitted: false,
11:58:01 0|red  |       writable: false,
11:58:01 0|red  |       [Symbol(kOnFinished)]: []
11:58:01 0|red  |     },
11:58:01 0|red  |     allowHalfOpen: false,
11:58:01 0|red  |     _sockname: null,
11:58:01 0|red  |     _pendingData: null,
11:58:01 0|red  |     _pendingEncoding: '',
11:58:01 0|red  |     server: null,
11:58:01 0|red  |     _server: null,
11:58:01 0|red  |     [Symbol(async_id_symbol)]: 4596,
11:58:01 0|red  |     [Symbol(kHandle)]: Pipe { reading: true, [Symbol(owner_symbol)]: [Circular *3] },
11:58:01 0|red  |     [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |     [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |     [Symbol(timeout)]: null,
11:58:01 0|red  |     [Symbol(kBuffer)]: null,
11:58:01 0|red  |     [Symbol(kBufferCb)]: null,
11:58:01 0|red  |     [Symbol(kBufferGen)]: null,
11:58:01 0|red  |     [Symbol(kCapture)]: false,
11:58:01 0|red  |     [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |     [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |   },
11:58:01 0|red  |   stderr: <ref *4> Socket {
11:58:01 0|red  |     connecting: false,
11:58:01 0|red  |     _hadError: false,
11:58:01 0|red  |     _parent: null,
11:58:01 0|red  |     _host: null,
11:58:01 0|red  |     _readableState: ReadableState {
11:58:01 0|red  |       objectMode: false,
11:58:01 0|red  |       highWaterMark: 16384,
11:58:01 0|red  |       buffer: BufferList { head: null, tail: null, length: 0 },
11:58:01 0|red  |       length: 0,
11:58:01 0|red  |       pipes: [],
11:58:01 0|red  |       flowing: true,
11:58:01 0|red  |       ended: false,
11:58:01 0|red  |       endEmitted: false,
11:58:01 0|red  |       reading: true,
11:58:01 0|red  |       constructed: true,
11:58:01 0|red  |       sync: false,
11:58:01 0|red  |       needReadable: true,
11:58:01 0|red  |       emittedReadable: false,
11:58:01 0|red  |       readableListening: false,
11:58:01 0|red  |       resumeScheduled: true,
11:58:01 0|red  |       errorEmitted: false,
11:58:01 0|red  |       emitClose: false,
11:58:01 0|red  |       autoDestroy: true,
11:58:01 0|red  |       destroyed: false,
11:58:01 0|red  |       errored: null,
11:58:01 0|red  |       closed: false,
11:58:01 0|red  |       closeEmitted: false,
11:58:01 0|red  |       defaultEncoding: 'utf8',
11:58:01 0|red  |       awaitDrainWriters: null,
11:58:01 0|red  |       multiAwaitDrain: false,
11:58:01 0|red  |       readingMore: false,
11:58:01 0|red  |       dataEmitted: false,
11:58:01 0|red  |       decoder: [StringDecoder],
11:58:01 0|red  |       encoding: 'utf8',
11:58:01 0|red  |       [Symbol(kPaused)]: false
11:58:01 0|red  |     },
11:58:01 0|red  |     _events: [Object: null prototype] {
11:58:01 0|red  |       end: [Function: onReadableStreamEnd],
11:58:01 0|red  |       close: [Function (anonymous)],
11:58:01 0|red  |       data: [Function: onChildStderr]
11:58:01 0|red  |     },
11:58:01 0|red  |     _eventsCount: 3,
11:58:01 0|red  |     _maxListeners: undefined,
11:58:01 0|red  |     _writableState: WritableState {
11:58:01 0|red  |       objectMode: false,
11:58:01 0|red  |       highWaterMark: 16384,
11:58:01 0|red  |       finalCalled: false,
11:58:01 0|red  |       needDrain: false,
11:58:01 0|red  |       ending: false,
11:58:01 0|red  |       ended: false,
11:58:01 0|red  |       finished: false,
11:58:01 0|red  |       destroyed: false,
11:58:01 0|red  |       decodeStrings: false,
11:58:01 0|red  |       defaultEncoding: 'utf8',
11:58:01 0|red  |       length: 0,
11:58:01 0|red  |       writing: false,
11:58:01 0|red  |       corked: 0,
11:58:01 0|red  |       sync: true,
11:58:01 0|red  |       bufferProcessing: false,
11:58:01 0|red  |       onwrite: [Function: bound onwrite],
11:58:01 0|red  |       writecb: null,
11:58:01 0|red  |       writelen: 0,
11:58:01 0|red  |       afterWriteTickInfo: null,
11:58:01 0|red  |       buffered: [],
11:58:01 0|red  |       bufferedIndex: 0,
11:58:01 0|red  |       allBuffers: true,
11:58:01 0|red  |       allNoop: true,
11:58:01 0|red  |       pendingcb: 0,
11:58:01 0|red  |       constructed: true,
11:58:01 0|red  |       prefinished: false,
11:58:01 0|red  |       errorEmitted: false,
11:58:01 0|red  |       emitClose: false,
11:58:01 0|red  |       autoDestroy: true,
11:58:01 0|red  |       errored: null,
11:58:01 0|red  |       closed: false,
11:58:01 0|red  |       closeEmitted: false,
11:58:01 0|red  |       writable: false,
11:58:01 0|red  |       [Symbol(kOnFinished)]: []
11:58:01 0|red  |     },
11:58:01 0|red  |     allowHalfOpen: false,
11:58:01 0|red  |     _sockname: null,
11:58:01 0|red  |     _pendingData: null,
11:58:01 0|red  |     _pendingEncoding: '',
11:58:01 0|red  |     server: null,
11:58:01 0|red  |     _server: null,
11:58:01 0|red  |     [Symbol(async_id_symbol)]: 4597,
11:58:01 0|red  |     [Symbol(kHandle)]: Pipe { reading: true, [Symbol(owner_symbol)]: [Circular *4] },
11:58:01 0|red  |     [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |     [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |     [Symbol(timeout)]: null,
11:58:01 0|red  |     [Symbol(kBuffer)]: null,
11:58:01 0|red  |     [Symbol(kBufferCb)]: null,
11:58:01 0|red  |     [Symbol(kBufferGen)]: null,
11:58:01 0|red  |     [Symbol(kCapture)]: false,
11:58:01 0|red  |     [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |     [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |   },
11:58:01 0|red  |   stdio: [
11:58:01 0|red  |     <ref *2> Socket {
11:58:01 0|red  |       connecting: false,
11:58:01 0|red  |       _hadError: false,
11:58:01 0|red  |       _parent: null,
11:58:01 0|red  |       _host: null,
11:58:01 0|red  |       _readableState: [ReadableState],
11:58:01 0|red  |       _events: [Object: null prototype],
11:58:01 0|red  |       _eventsCount: 1,
11:58:01 0|red  |       _maxListeners: undefined,
11:58:01 0|red  |       _writableState: [WritableState],
11:58:01 0|red  |       allowHalfOpen: false,
11:58:01 0|red  |       _sockname: null,
11:58:01 0|red  |       _pendingData: null,
11:58:01 0|red  |       _pendingEncoding: '',
11:58:01 0|red  |       server: null,
11:58:01 0|red  |       _server: null,
11:58:01 0|red  |       [Symbol(async_id_symbol)]: 4595,
11:58:01 0|red  |       [Symbol(kHandle)]: [Pipe],
11:58:01 0|red  |       [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |       [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |       [Symbol(timeout)]: null,
11:58:01 0|red  |       [Symbol(kBuffer)]: null,
11:58:01 0|red  |       [Symbol(kBufferCb)]: null,
11:58:01 0|red  |       [Symbol(kBufferGen)]: null,
11:58:01 0|red  |       [Symbol(kCapture)]: false,
11:58:01 0|red  |       [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |       [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |     },
11:58:01 0|red  |     <ref *3> Socket {
11:58:01 0|red  |       connecting: false,
11:58:01 0|red  |       _hadError: false,
11:58:01 0|red  |       _parent: null,
11:58:01 0|red  |       _host: null,
11:58:01 0|red  |       _readableState: [ReadableState],
11:58:01 0|red  |       _events: [Object: null prototype],
11:58:01 0|red  |       _eventsCount: 3,
11:58:01 0|red  |       _maxListeners: undefined,
11:58:01 0|red  |       _writableState: [WritableState],
11:58:01 0|red  |       allowHalfOpen: false,
11:58:01 0|red  |       _sockname: null,
11:58:01 0|red  |       _pendingData: null,
11:58:01 0|red  |       _pendingEncoding: '',
11:58:01 0|red  |       server: null,
11:58:01 0|red  |       _server: null,
11:58:01 0|red  |       [Symbol(async_id_symbol)]: 4596,
11:58:01 0|red  |       [Symbol(kHandle)]: [Pipe],
11:58:01 0|red  |       [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |       [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |       [Symbol(timeout)]: null,
11:58:01 0|red  |       [Symbol(kBuffer)]: null,
11:58:01 0|red  |       [Symbol(kBufferCb)]: null,
11:58:01 0|red  |       [Symbol(kBufferGen)]: null,
11:58:01 0|red  |       [Symbol(kCapture)]: false,
11:58:01 0|red  |       [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |       [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |     },
11:58:01 0|red  |     <ref *4> Socket {
11:58:01 0|red  |       connecting: false,
11:58:01 0|red  |       _hadError: false,
11:58:01 0|red  |       _parent: null,
11:58:01 0|red  |       _host: null,
11:58:01 0|red  |       _readableState: [ReadableState],
11:58:01 0|red  |       _events: [Object: null prototype],
11:58:01 0|red  |       _eventsCount: 3,
11:58:01 0|red  |       _maxListeners: undefined,
11:58:01 0|red  |       _writableState: [WritableState],
11:58:01 0|red  |       allowHalfOpen: false,
11:58:01 0|red  |       _sockname: null,
11:58:01 0|red  |       _pendingData: null,
11:58:01 0|red  |       _pendingEncoding: '',
11:58:01 0|red  |       server: null,
11:58:01 0|red  |       _server: null,
11:58:01 0|red  |       [Symbol(async_id_symbol)]: 4597,
11:58:01 0|red  |       [Symbol(kHandle)]: [Pipe],
11:58:01 0|red  |       [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |       [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |       [Symbol(timeout)]: null,
11:58:01 0|red  |       [Symbol(kBuffer)]: null,
11:58:01 0|red  |       [Symbol(kBufferCb)]: null,
11:58:01 0|red  |       [Symbol(kBufferGen)]: null,
11:58:01 0|red  |       [Symbol(kCapture)]: false,
11:58:01 0|red  |       [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |       [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |     }
11:58:01 0|red  |   ],
11:58:01 0|red  |   [Symbol(kCapture)]: false
11:58:01 0|red  | }
11:58:01 0|red  |     at setTimeout (node:timers:141:3)
11:58:01 0|red  |     at Object.getAndCheckSign (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/projects.js:201:9)
11:58:01 0|red  |     at Timeout._onTimeout (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/comms.js:248:26)
11:58:01 0|red  |     at listOnTimeout (node:internal/timers:559:17)
11:58:01 0|red  |     at processTimers (node:internal/timers:502:7) {
11:58:01 0|red  |   code: 'ERR_INVALID_CALLBACK'
11:58:01 0|red  | }
11:58:01 0|red  | 21 Nov 11:58:01 - [red] Uncaught Exception:
11:58:01 0|red  | 21 Nov 11:58:01 - [error] TypeError: Callback must be a function. Received <ref *1> ChildProcess {
11:58:01 0|red  |   _events: [Object: null prototype] {
11:58:01 0|red  |     close: [Function: exithandler],
11:58:01 0|red  |     error: [Function: errorhandler]
11:58:01 0|red  |   },
11:58:01 0|red  |   _eventsCount: 2,
11:58:01 0|red  |   _maxListeners: undefined,
11:58:01 0|red  |   _closesNeeded: 3,
11:58:01 0|red  |   _closesGot: 0,
11:58:01 0|red  |   connected: false,
11:58:01 0|red  |   signalCode: null,
11:58:01 0|red  |   exitCode: null,
11:58:01 0|red  |   killed: false,
11:58:01 0|red  |   spawnfile: '/bin/sh',
11:58:01 0|red  |   _handle: Process {
11:58:01 0|red  |     onexit: [Function (anonymous)],
11:58:01 0|red  |     pid: 49,
11:58:01 0|red  |     [Symbol(owner_symbol)]: [Circular *1]
11:58:01 0|red  |   },
11:58:01 0|red  |   spawnargs: [ '/bin/sh', '-c', 'pm2 stop red.js' ],
11:58:01 0|red  |   pid: 49,
11:58:01 0|red  |     <ref *4> Socket {
11:58:01 0|red  |       connecting: false,
11:58:01 0|red  |       _hadError: false,
11:58:01 0|red  |       _parent: null,
11:58:01 0|red  |       _host: null,
11:58:01 0|red  |       _readableState: [ReadableState],
11:58:01 0|red  |       _events: [Object: null prototype],
11:58:01 0|red  |       _eventsCount: 3,
11:58:01 0|red  |       _maxListeners: undefined,
11:58:01 0|red  |       _writableState: [WritableState],
11:58:01 0|red  |       allowHalfOpen: false,
11:58:01 0|red  |       _sockname: null,
11:58:01 0|red  |       _pendingData: null,
11:58:01 0|red  |       _pendingEncoding: '',
11:58:01 0|red  |       server: null,
11:58:01 0|red  |       _server: null,
11:58:01 0|red  |       [Symbol(async_id_symbol)]: 4597,
11:58:01 0|red  |       [Symbol(kHandle)]: [Pipe],
11:58:01 0|red  |       [Symbol(kSetNoDelay)]: false,
11:58:01 0|red  |       [Symbol(lastWriteQueueSize)]: 0,
11:58:01 0|red  |       [Symbol(timeout)]: null,
11:58:01 0|red  |       [Symbol(kBuffer)]: null,
11:58:01 0|red  |       [Symbol(kBufferCb)]: null,
11:58:01 0|red  |       [Symbol(kBufferGen)]: null,
11:58:01 0|red  |       [Symbol(kCapture)]: false,
11:58:01 0|red  |       [Symbol(kBytesRead)]: 0,
11:58:01 0|red  |       [Symbol(kBytesWritten)]: 0
11:58:01 0|red  |     }
11:58:01 0|red  |   ],
11:58:01 0|red  |   [Symbol(kCapture)]: false
11:58:01 0|red  | }
11:58:01 0|red  |     at setTimeout (node:timers:141:3)
11:58:01 0|red  |     at Object.getAndCheckSign (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/projects.js:201:9)
11:58:01 0|red  |     at Timeout._onTimeout (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/comms.js:248:26)
11:58:01 0|red  |     at listOnTimeout (node:internal/timers:559:17)
11:58:01 0|red  |     at processTimers (node:internal/timers:502:7)
2024-11-21T11:58:01: PM2 log: App [red:0] exited with code [1] via signal [SIGINT]
11:58:01 PM2      | App [red:0] exited with code [1] via signal [SIGINT]
2024-11-21T11:58:01: PM2 log: App [red:0] starting in -fork mode-
11:58:01 PM2      | App [red:0] starting in -fork mode-
2024-11-21T11:58:01: PM2 log: App [red:0] online
11:58:01 PM2      | App [red:0] online
2024-11-21T11:58:01: PM2 log: Stopping app:red id:0
2024-11-21T11:58:01: PM2 log: Stopping app:red id:0
11:58:01 PM2      | Stopping app:red id:0
11:58:01 PM2      | Error: spawn ps ENOENT
11:58:01 PM2      |     at Process.ChildProcess._handle.onexit (node:internal/child_process:283:19)
11:58:01 PM2      |     at onErrorNT (node:internal/child_process:478:16)
11:58:01 PM2      |     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
11:58:01 PM2      |   errno: -2,
11:58:01 PM2      |   code: 'ENOENT',
11:58:01 PM2      |   syscall: 'spawn ps',
11:58:01 PM2      |   path: 'ps',
11:58:01 PM2      |   spawnargs: [ '-o', 'pid', '--no-headers', '--ppid', 58 ]
11:58:01 PM2      | }
11:58:01 PM2      | Stopping app:red id:0
11:58:01 PM2      | Error: spawn ps ENOENT
11:58:01 PM2      |     at Process.ChildProcess._handle.onexit (node:internal/child_process:283:19)
11:58:01 PM2      |     at onErrorNT (node:internal/child_process:478:16)
11:58:01 PM2      |     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
11:58:01 PM2      |   errno: -2,
11:58:01 PM2      |   code: 'ENOENT',
11:58:01 PM2      |   syscall: 'spawn ps',
11:58:01 PM2      |   path: 'ps',
11:58:01 PM2      |   spawnargs: [ '-o', 'pid', '--no-headers', '--ppid', 58 ]
11:58:01 PM2      | }
2024-11-21T11:58:01: PM2 log: App [red:0] exited with code [0] via signal [SIGINT]
11:58:01 PM2      | App [red:0] exited with code [0] via signal [SIGINT]
2024-11-21T11:58:01: PM2 log: pid=58 msg=process killed
2024-11-21T11:58:01: PM2 log: pid=58 msg=process killed
11:58:01 PM2      | pid=58 msg=process killed
11:58:01 PM2      | pid=58 msg=process killed

It seems to be saying that there is a problem in that function.

However, if you want node red to run reliably 24/7 then many would say that Windows is not the right OS. Get a refurbished Lenovo Lifebook and put Ubuntu on it and it will run happily for years.

You mean that the node-red service stopped because of a problem with the json file such as that function. By the way, It runs on CentOS 7.0.

Looking again I don't think the problem is to do with that function. I had not noticed that the warning message is long before the crash. In fact I think that this is probably the problem

  getAndCheckSign {} 2024-11-21T11:58:01.197Z
11:58:01 0|red  | TypeError: Callback must be a function. Received <ref *1> ChildProcess {
11:58:01 0|red  |   _events: [Object: null prototype] {
11:58:01 0|red  |     close: [Function: exithandler],
11:58:01 0|red  |     error: [Function: errorhandler]
11:58:01 0|red  |   },

along with

11:58:01 0|red  |     at setTimeout (node:timers:141:3)
11:58:01 0|red  |     at Object.getAndCheckSign (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/projects.js:109:17)
11:58:01 0|red  |     at Timeout._onTimeout (/usr/src/app/node_modules/@node-red/editor-api/lib/editor/comms.js:248:26)
11:58:01 0|red  |     at listOnTimeout (node:internal/timers:559:17)
11:58:01 0|red  |     at processTimers (node:internal/timers:502:7) {
11:58:01 0|red  |   code: 'ERR_INVALID_CALLBACK'
11:58:01 0|red  | }

That should tell somebody what is going on, but I don't know what it means.
Hopefully one of the core developers will understand it.

Sorry, I assumed that you were using Windows as you are using pm2.