我是shell脚本的初学者。
我有一个节点js程序和一个使用mongoDB的API。因此,API使用express并链接到我的路由和模式 - 我需要做的就是启动API服务器node app.js
但是,我还有我的主程序,它会轮询用户通过数据库添加的特定URL,然后将从轮询请求返回的数据保存在数据库中。这种情况发生在每个' x'秒,因此我总是在轮询发生时打开mongo连接,并在它完成后立即关闭它。因此,为了运行此程序,我需要运行node main.js
app.js
似乎只是在程序运行时打开mongo连接一次。
所以我的问题是 - 我可以通过编写一个bash脚本以某种方式将它们链接在一起,这样我就可以一起启动这两个进程并在需要时结束它们吗?
我试过这样做:
#!/usr/bin/bash
# declare STRING variable
STRING="Starting node processes"
#print variable on a screen
echo $STRING
node misrepo/app.js
node misrepo/main.js
但是,这仅启动app.js
,并且不会运行我的main.js
应用程序。
任何帮助都会受到赞赏,因为我只想通过谷歌帮助解决这个问题!
答案 0 :(得分:1)
Markus的回答很好,
不过,我需要添加一些评论,由于缺乏声誉,我需要创建一个答案。最好在后台启动两个进程(由&引起)并等待两个进程完成。否则,当您只等待第二个命令时,似乎两个进程都已完成。这可能会导致处理两个命令的输出时出现问题。
#!/usr/bin/bash
# declare STRING variable
STRING="Starting node processes"
#print variable on a screen
echo $STRING
node misrepo/app.js&
node misrepo/main.js&
# wait until both background processes finish
wait
最佳, 弗兰克
答案 1 :(得分:1)
服务管理很棘手,并且有专门为它构建的工具。如果你不用bash重新发明轮子,那就最好了。
npm install forever -g
forever start misrepo/app.js
将它们放入您的脚本
#!/bin/sh
forever start misrepo/app.js
forever start misrepo/main.js
您还可以在package.json
{
"scripts": {
"start": "forever start misrepo/app.js && forever start misrepo/main.js"
}
}
然后npm start
将启动您的应用。 stop
和restart
也是标准。
如果您在服务器上执行此操作,请使用本机服务管理器来管理每项服务。如果你在Linux上,这很可能是systemd。
答案 2 :(得分:0)
要并行启动两个程序,您可以执行以下操作:
#!/usr/bin/bash
# declare STRING variable
STRING="Starting node processes"
#print variable on a screen
echo $STRING
node misrepo/app.js & node misrepo/main.js
这将使用misrepo/app.js
启动节点,并立即使用misrepo/main.js
启动另一个节点实例。
在您的示例中,脚本会阻塞,直到node misrepo/app.js
完成执行,然后才会启动node misrepo/main.js
答案 3 :(得分:0)
这可能为时已晚,但希望这对正在寻找答案的人有所帮助。
#!/bin/bash
//进入第一个文件夹
cd / var / www / html / demo /
//检查文件(如果不需要,请删除ls
ls //这将开始第一个节点进程,并在&之后进入下一个目录
节点app.js和cd / var / www / html / demo1
//以确保从前一行开始使用cd命令
ls
//启动第二个节点服务器
node server.js;
//执行bin文件
exec bash