mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-09-09 01:17:06 +08:00
51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
import path from 'node:path'
|
|
import * as url from 'url'
|
|
import { sleep } from '@geekgeekrun/utils/sleep.mjs';
|
|
import childProcess from 'node:child_process';
|
|
import { AUTO_CHAT_ERROR_EXIT_CODE } from './enums.mjs'
|
|
|
|
const rerunInterval = (() => {
|
|
let v = Number(process.env.MAIN_BOSSGEEKGO_RERUN_INTERVAL)
|
|
if (isNaN(v)) {
|
|
v = 3000
|
|
}
|
|
|
|
return v
|
|
})()
|
|
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
|
function runWithDaemon () {
|
|
const subProcessOfCore = childProcess.spawn(
|
|
`node`,
|
|
[path.join(
|
|
__dirname,
|
|
'main.mjs'
|
|
)],
|
|
{
|
|
stdio: ['inherit', 'inherit', 'inherit', 'pipe', 'ipc'],
|
|
env: {
|
|
...process.env,
|
|
MAIN_BOSSGEEKGO_RERUN_INTERVAL: rerunInterval
|
|
}
|
|
}
|
|
)
|
|
|
|
subProcessOfCore.once(
|
|
'exit',
|
|
async (exitCode) => {
|
|
if (
|
|
[
|
|
...Object.values(AUTO_CHAT_ERROR_EXIT_CODE)
|
|
].filter(it => typeof it === 'number').includes(exitCode)
|
|
) {
|
|
console.log(`[Run core daemon] Child process exit with reason ${AUTO_CHAT_ERROR_EXIT_CODE[exitCode]}.`)
|
|
process.exit(exitCode)
|
|
return
|
|
}
|
|
console.log(`[Run core daemon] Child process exit with code ${exitCode}, an internal error may not be caught, and will be restarted in ${rerunInterval}ms.`)
|
|
await sleep(rerunInterval)
|
|
runWithDaemon()
|
|
}
|
|
)
|
|
}
|
|
|
|
runWithDaemon() |