首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一起运行和管理具有相同可执行文件的两个守护进程

一起运行和管理具有相同可执行文件的两个守护进程
EN

Unix & Linux用户
提问于 2018-10-19 17:02:36
回答 1查看 871关注 0票数 1

我使用FreeBSD UNIX及其启动脚本的远程控制系统使我的Node.js服务器在重新启动时作为守护进程启动,并作为守护进程再次启动,并在登录到FreeBSD UNIX用户帐户后使用系统提供的一些命令停止它们。

我读过手册相关章节和一篇关于它的文章,我分别用/etc/rc.d/my_script/etc.rc.conf编写了下面的脚本和配置。就像我描述的那样。当我为另一个服务添加另一个脚本时--其中只有一个能工作--我想通常是第二个脚本。每个服务器编码以侦听不同的端口号。

my_script_1作为'-rwxr-xr-x'对所有人都是可执行的。

/etc/rc.d/my_script_1

代码语言:javascript
复制
#!/bin/sh

. /etc/rc.subr

name=my_service_1
rcvar=${name}_enable

project_dir="/usr/home/ec2-user/dev/projects/my_project_1"

command="/usr/local/bin/node"
command_args="${project_dir}/index.js"

load_rc_config $name
run_rc_command "$1"

/etc.rc.conf包括启用var集:

my_service_1_enable="YES"

当我添加另一个脚本和rc.conf条目,比如那些只将名称更改为不同名称的脚本和my_service_2条目时,它们中只有一个能工作。my_script_2也是可执行的。

我遗漏了什么?我怎么能让他们两者兼得呢?

EN

回答 1

Unix & Linux用户

发布于 2018-10-20 07:43:33

当您编写时,“通常”听起来像是一种竞赛条件。然后是随机的哪一个实例才能生存下来。

在您尝试使用rc脚本时,没有基本的问题。rc脚本只启动命令。但是,您尝试开始的事情需要能够在多个实例中运行。rc系统无法神奇地做到这一点。

根据您的描述,我猜想项目1和2的部分使用了相同的资源,因此node.js只能运行一个实例。例如,两个项目绑定到同一个端口。两个实例不能在同一个端口上运行--因此只有第一个开始(竞赛)的实例才能存活。

要调试这一点,首先要确保正确处理多个实例。尝试禁用启动脚本。然后手动同时启动两个项目。

你先跑:

代码语言:javascript
复制
/usr/local/bin/node /usr/home/ec2-user/dev/projects/my_project_1/index.js

然后:

代码语言:javascript
复制
/usr/local/bin/node /usr/home/ec2-user/dev/projects/my_project_2/index.js

当节点输出到STDOUT,而错误发生在STDERR时,就更容易看出出了什么问题。我很肯定,你的问题就在这里,输出可以帮助你进一步调查。

如果上述操作确实有效(与我的怀疑相反),那么您需要从启动脚本中的起始节点进程获取日志输出。它看起来不像node.js日志到一个文件或syslog。这意味着,如果您试图手动启动rc脚本,您应该将错误输出到屏幕上。因此,尝试使用以下方法控制您的rc脚本:

代码语言:javascript
复制
service my_service_1 start

要进一步了解日志记录,请看一下nodejs-日志文件在哪里?

注意:您正在/etc/rc.d/your_script中使用您自己的脚本,这是针对基本系统的。您应该将脚本放在/usr/local/etc/rc.d/your_script中。service命令搜索这两个位置,因此它的工作原理是一样的。也没有与/etc/rc.conf相关联的更改。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/476589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档