Skip to content

Commit 7a8a8ab

Browse files
committed
修改系统重启逻辑
1 parent 2ac4581 commit 7a8a8ab

File tree

10 files changed

+90
-63
lines changed

10 files changed

+90
-63
lines changed

Diff for: back/loaders/server.ts

-22
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,6 @@ import Sock from './sock';
55
export default async ({ server }: { server: Server }) => {
66
await Sock({ server });
77
Logger.info('✌️ Sock loaded');
8-
let exitTime = 0;
9-
let timer: NodeJS.Timeout;
10-
11-
process.on('SIGINT', (singal) => {
12-
Logger.warn(`Server need close, singal ${singal}`);
13-
console.warn(`Server need close, singal ${singal}`);
14-
exitTime++;
15-
if (exitTime >= 3) {
16-
Logger.warn('Forcing server close');
17-
console.warn('Forcing server close');
18-
clearTimeout(timer);
19-
process.exit(1);
20-
}
21-
server.close(() => {
22-
if (timer) {
23-
clearTimeout(timer);
24-
}
25-
timer = setTimeout(() => {
26-
process.exit();
27-
}, 15000);
28-
});
29-
});
308

319
process.on('uncaughtException', (error) => {
3210
Logger.error('Uncaught exception:', error);

Diff for: back/loaders/update.ts

+16-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import cors from 'cors';
44
import { Application, NextFunction, Request, Response } from 'express';
55
import jwt from 'express-jwt';
66
import Container from 'typedi';
7-
import Logger from './logger';
87
import config from '../config';
98
import SystemService from '../services/system';
9+
import Logger from './logger';
1010

1111
export default ({ app }: { app: Application }) => {
1212
app.set('trust proxy', 'loopback');
@@ -22,6 +22,20 @@ export default ({ app }: { app: Application }) => {
2222
}),
2323
);
2424

25+
app.put(
26+
'/api/reload',
27+
async (req: Request, res: Response, next: NextFunction) => {
28+
try {
29+
const systemService = Container.get(SystemService);
30+
const result = await systemService.reloadSystem();
31+
res.send(result);
32+
} catch (e) {
33+
Logger.error('🔥 error: %o', e);
34+
return next(e);
35+
}
36+
},
37+
);
38+
2539
app.put(
2640
'/api/system',
2741
async (req: Request, res: Response, next: NextFunction) => {
@@ -35,6 +49,7 @@ export default ({ app }: { app: Application }) => {
3549
}
3650
},
3751
);
52+
3853
app.put(
3954
'/api/data',
4055
async (req: Request, res: Response, next: NextFunction) => {

Diff for: back/services/system.ts

+36-24
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,39 @@
1+
import { spawn } from 'cross-spawn';
12
import { Response } from 'express';
2-
import { Service, Inject } from 'typedi';
3+
import fs from 'fs';
4+
import got from 'got';
5+
import sum from 'lodash/sum';
6+
import path from 'path';
7+
import tar from 'tar';
8+
import { Inject, Service } from 'typedi';
39
import winston from 'winston';
410
import config from '../config';
11+
import { TASK_COMMAND } from '../config/const';
12+
import {
13+
getPid,
14+
killTask,
15+
parseContentVersion,
16+
parseVersion,
17+
promiseExec,
18+
readDirs,
19+
} from '../config/util';
20+
import {
21+
DependenceModel,
22+
DependenceStatus,
23+
DependenceTypes,
24+
} from '../data/dependence';
25+
import { NotificationInfo } from '../data/notify';
526
import {
627
AuthDataType,
728
AuthInfo,
829
SystemInstance,
930
SystemModel,
1031
SystemModelInfo,
1132
} from '../data/system';
12-
import { NotificationInfo } from '../data/notify';
33+
import taskLimit from '../shared/pLimit';
1334
import NotificationService from './notify';
1435
import ScheduleService, { TaskCallbacks } from './schedule';
15-
import { spawn } from 'cross-spawn';
1636
import SockService from './sock';
17-
import got from 'got';
18-
import {
19-
getPid,
20-
killTask,
21-
parseContentVersion,
22-
parseVersion,
23-
promiseExec,
24-
readDirs,
25-
} from '../config/util';
26-
import { TASK_COMMAND } from '../config/const';
27-
import taskLimit from '../shared/pLimit';
28-
import tar from 'tar';
29-
import path from 'path';
30-
import fs from 'fs';
31-
import sum from 'lodash/sum';
32-
import { DependenceModel, DependenceStatus, DependenceTypes } from '../data/dependence';
3337

3438
@Service()
3539
export default class SystemService {
@@ -139,7 +143,10 @@ export default class SystemService {
139143
}
140144
let command = `cd && ${cmd}`;
141145
const docs = await DependenceModel.findAll({
142-
where: { type: DependenceTypes.nodejs, status: DependenceStatus.installed },
146+
where: {
147+
type: DependenceTypes.nodejs,
148+
status: DependenceStatus.installed,
149+
},
143150
});
144151
if (docs.length > 0) {
145152
command += ` && pnpm i -g`;
@@ -326,7 +333,7 @@ export default class SystemService {
326333
return { code: 200 };
327334
}
328335

329-
public async reloadSystem(target: 'system' | 'data') {
336+
public async reloadSystem(target?: 'system' | 'data') {
330337
const cmd = `real_time=true ql reload ${target || ''}`;
331338
const cp = spawn(cmd, { shell: '/bin/bash' });
332339
cp.unref();
@@ -382,8 +389,13 @@ export default class SystemService {
382389

383390
public async exportData(res: Response) {
384391
try {
385-
await tar.create(
386-
{ gzip: true, file: config.dataTgzFile, cwd: config.rootPath },
392+
tar.create(
393+
{
394+
gzip: true,
395+
file: config.dataTgzFile,
396+
cwd: config.rootPath,
397+
sync: true,
398+
},
387399
['data'],
388400
);
389401
res.download(config.dataTgzFile);
@@ -395,7 +407,7 @@ export default class SystemService {
395407
public async importData() {
396408
try {
397409
await promiseExec(`rm -rf ${path.join(config.tmpPath, 'data')}`);
398-
await tar.x({ file: config.dataTgzFile, cwd: config.tmpPath });
410+
tar.x({ file: config.dataTgzFile, cwd: config.tmpPath, sync: true });
399411
return { code: 200 };
400412
} catch (error: any) {
401413
return { code: 400, message: error.message };

Diff for: docker/docker-entrypoint.sh

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ nginx -s reload 2>/dev/null || nginx -c /etc/nginx/nginx.conf
2121
echo -e "nginx启动成功...\n"
2222

2323
echo -e "======================4. 启动pm2服务========================\n"
24+
reload_update
2425
reload_pm2
2526

2627
if [[ $AutoStartBot == true ]]; then

Diff for: ecosystem.config.js

-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
11
module.exports = {
22
apps: [
3-
{
4-
name: 'update',
5-
max_restarts: 10,
6-
kill_timeout: 15000,
7-
wait_ready: true,
8-
listen_timeout: 10000,
9-
time: true,
10-
script: 'static/build/update.js',
11-
},
123
{
134
name: 'schedule',
145
max_restarts: 10,

Diff for: other.config.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module.exports = {
2+
apps: [
3+
{
4+
name: 'update',
5+
max_restarts: 10,
6+
kill_timeout: 15000,
7+
wait_ready: true,
8+
listen_timeout: 10000,
9+
time: true,
10+
script: 'static/build/update.js',
11+
},
12+
],
13+
};

Diff for: shell/check.sh

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ main() {
8181
check_ql
8282
check_nginx
8383
check_pm2
84+
reload_update
8485
reload_pm2
8586
echo -e "\n=====> 检测结束\n"
8687
}

Diff for: shell/share.sh

+12
Original file line numberDiff line numberDiff line change
@@ -305,13 +305,25 @@ random_range() {
305305
echo $((RANDOM % ($end - $beg) + $beg))
306306
}
307307

308+
delete_pm2() {
309+
cd $dir_root
310+
pm2 delete ecosystem.config.js
311+
}
312+
308313
reload_pm2() {
309314
cd $dir_root
310315
restore_env_vars
311316
pm2 flush &>/dev/null
312317
pm2 startOrGracefulReload ecosystem.config.js
313318
}
314319

320+
reload_update() {
321+
cd $dir_root
322+
restore_env_vars
323+
pm2 flush &>/dev/null
324+
pm2 startOrGracefulReload other.config.js
325+
}
326+
315327
diff_time() {
316328
local format="$1"
317329
local begin_time="$2"

Diff for: shell/update.sh

+6-2
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ usage() {
231231
}
232232

233233
reload_qinglong() {
234+
delete_pm2
235+
234236
local reload_target="${1}"
235237
local primary_branch="master"
236238
if [[ "${QL_BRANCH}" == "develop" ]]; then
@@ -245,8 +247,8 @@ reload_qinglong() {
245247
fi
246248

247249
if [[ "$reload_target" == 'data' ]]; then
248-
rm -rf ${dir_root}/data
249-
cp -rf ${dir_tmp}/data ${dir_root}/
250+
rm -rf ${dir_root}/data/*
251+
mv -f ${dir_tmp}/data/* ${dir_root}/data/
250252
fi
251253

252254
reload_pm2
@@ -310,6 +312,8 @@ check_update_dep() {
310312
echo -e "更新包下载成功..."
311313

312314
if [[ "$needRestart" == 'true' ]]; then
315+
delete_pm2
316+
313317
cp -rf ${dir_tmp}/qinglong-${primary_branch}/* ${dir_root}/
314318
rm -rf $dir_static/*
315319
cp -rf ${dir_tmp}/qinglong-static-${primary_branch}/* ${dir_static}/

Diff for: src/pages/setting/checkUpdate.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import intl from 'react-intl-universal';
2-
import React, { useEffect, useState, useRef, useCallback } from 'react';
3-
import { Statistic, Modal, Tag, Button, Spin, message } from 'antd';
4-
import { request } from '@/utils/http';
51
import config from '@/utils/config';
2+
import { request } from '@/utils/http';
63
import WebSocketManager from '@/utils/websocket';
74
import Ansi from 'ansi-to-react';
5+
import { Button, Modal, Statistic, message } from 'antd';
6+
import { useCallback, useEffect, useRef, useState } from 'react';
7+
import intl from 'react-intl-universal';
88

99
const { Countdown } = Statistic;
1010

@@ -220,7 +220,7 @@ const CheckUpdate = ({ systemInfo }: any) => {
220220
</Button>
221221
<Button
222222
type="primary"
223-
onClick={() => reloadSystem('system')}
223+
onClick={() => reloadSystem('reload')}
224224
style={{ marginLeft: 8 }}
225225
>
226226
{intl.get('重新启动')}

0 commit comments

Comments
 (0)