PM2 运行Bash脚本

pm2 list # 进程列表
pm2 monit # 实时监控
pm2 logs # 日志输出

pm2 start app.js
pm2 start app.sh

pm2 start app.js –name my-app

pm2 start run-script-node.js –name sak-rezedge-com

pm2 restart sak-rezedge-com
pm2 stop my-app
pm2 delete my-app

脚本示例

updateblog 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// run-script-node.js
const express = require('express');
const { spawn } = require('child_process');

const app = express();
const PORT = 3764;

app.use(express.json());

app.get('/updateblog', (req, res) => {
const scriptPath = "/www/updateBlog.sh";
const child = spawn('bash', [scriptPath]);

// 设置响应头,让浏览器逐步接收数据
res.setHeader('Content-Type', 'text/plain; charset=utf-8');

// 脚本的标准输出实时写入响应
child.stdout.on('data', (data) => {
res.write(data.toString());
});

// 脚本的错误输出也写到响应里
child.stderr.on('data', (data) => {
res.write(`ERR: ${data.toString()}`);
});

// 脚本结束时关闭响应
child.on('close', (code) => {
res.end(`\nScript finished with code ${code}\n`);
});
});

app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});


存储库更新脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd /opt/1panel/www/sites/blog.rezedge.com/source/_posts

BRANCH=master

LOCAL=$(git log $BRANCH -n 1 --pretty=format:"%H")
REMOTE=$(git log remotes/origin/$BRANCH -n 1 --pretty=format:"%H")

if [ $LOCAL = $REMOTE ]; then
echo "Up-to-date"
else
echo "Need update"
git fetch --all
git reset --hard origin/master
git pull
fi
echo "Start generate"
cd /opt/1panel/www/sites/blog.rezedge.com/
pnpm hexo generate
rm -r ./index/
mv ./public/ ./index/