在shell脚本

时间:2016-12-14 12:22:22

标签: javascript node.js bash mongodb shell

我是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应用程序。

任何帮助都会受到赞赏,因为我只想通过谷歌帮助解决这个问题!

4 个答案:

答案 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重新发明轮子,那就最好了。

使用foreverpm2管理服务。

npm install forever -g
forever start misrepo/app.js

将它们放入您的脚本

#!/bin/sh
forever start misrepo/app.js
forever start misrepo/main.js

您还可以在package.json

scripts部分中添加这些命令(或您的脚本)
{
  "scripts": {
    "start": "forever start misrepo/app.js && forever start misrepo/main.js"
  }
}

然后npm start将启动您的应用。 stoprestart也是标准。

如果您在服务器上执行此操作,请使用本机服务管理器来管理每项服务。如果你在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