大体思路:通过java远程调用linux shell,创建node-red的flows_xxx.json文件,然后启动node-red并指定json文件。
(在node-red操作界面添加的节点都会保存到相应json文件中,windows默认保存位置:C:\Users\LENOVO\.node-red,linux:~/.node-red。保存位置可以在启动服务的时候去指定
Usage: node-red [-v] [-?] [--settings settings.js] [--userDir DIR] [flows.json]
Options:
-s, --settings FILE use specified settings file
-u, --userDir DIR use specified user directory
-v enable verbose output
-?, --help show usage
建议看下官方文档 https://nodered.org/docs/getting-started/running,推荐使用谷歌浏览器直接右键翻译)
先放shell脚本:
#!/bin/bash
PRODUCT_ID=$1
FILE_NAME="flows_"$PRODUCT_ID".json"
PORT=$2
#create new flows_xxx.json
cd /usr/soft/node-red-flows
touch $FILE_NAME
# startup node-red server
nohup node-red -p $PORT $FILE_NAME > myout.file 2>&1 &
# return pid
printf $!"end"
需要传递两个参数,产品id和端口号(当初的想法是一个产品一个端口号,启动一个node-red。其他方案参考:多个产品只部署且公用一个node-red服务,点开不同产品去查询加载到ui界面上,但是还有一个问题,如果这样的话,没有点开的产品所在的node-red服务也必须是启动的,所以你得会去改源码,有兴趣的可以去研究下)
注:脚本最后返回node-red服务占用的PID号,为以后停止服务杀进程做准备
nohup 命令 > 打印输出文件 2&g