如何在生产模式下运行 redis 服务器和 juggernaut 服务器

Posted

技术标签:

【中文标题】如何在生产模式下运行 redis 服务器和 juggernaut 服务器【英文标题】:How to run redis server and juggernaut server in production mode 【发布时间】:2011-11-17 21:40:37 【问题描述】:

我正在使用juggernaut 推送服务器。如何在生产模式下启动redis和juggernaut导致我

 juggernaut

redis-server will keep on showing me log etc.

我在 rails 3 上使用 ruby​​。

编辑

我按照这两个指南在生产服务器上设置 juggernaut 和 redis

似乎两台服务器现在都运行顺利。但是我怎样才能访问

     :8080/application.js for juggernaut. 

我试过了

   my_ip:8080/application.js but nothing. 

对于托管,我使用的是 Linode。

EDIT2

当我尝试停止/启动 redis 服务器时,它会给我输出,即:

  Starting/Stopping redis-server: redis-server.

但是当我为剑圣做同样的事情时,什么都没有。检查屏幕截图。

编辑

我看不到任何关于 juggernaut 的日志.. 有一个用于 redis 但没有用于 juggernaut 的日志

编辑

    对 /etc/init.d/juggernaut 文件的可执行文件权限 -- 是

        -rwxr-xr-x 1 fizzy fizzy 1310 Sep 19 11:06 juggernaut
    

    PIDFILE=/var/run/juggernaut.pid' 已定义。那存在吗? --- 没有

    在“开始”部分,它运行“chown juggernaut:juggernaut”。用户 juggernaut 是否存在,它是 group juggernaut 的成员吗? -- 是/是

      cat /etc/group
          redis:x:1002:
          juggernaut:x:113:
    
      groups juggernaut
          juggernaut : juggernaut
    

编辑

     fizzy@li136-198:~$ sudo ls -l /usr/bin/juggernaut 
              ls: cannot access /usr/bin/juggernaut: No such file or directory
     fizzy@li136-198:~$ sudo ls -l /usr/local/bin/juggernaut 
            lrwxrwxrwx 1 root root 40 Sep 20 02:48 /usr/local/bin/juggernaut -> ../lib/node_modules/juggernaut/server.js

我尝试改变

        DAEMON=/usr/bin/juggernaut

        DAEMON=/usr/local/bin/juggernaut

之后我尝试使用

重新启动主宰
         sudo /etc/init.d/juggernaut start

服务器已启动,但未作为后台进程/服务。

编辑

在调试模式下运行脚本,即 更改顶部的 shebang 行以添加 -x,例如

    #! /bin/bash -x

这是输出:-

   + PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
   + DAEMON=/usr/bin/juggernaut
   + NAME=Juggernaut2
   + DESC=Juggernaut2
   + PIDFILE=/var/run/juggernaut.pid
   + test -x /usr/bin/juggernaut
   + exit 0

编辑

改变我的主宰的路径,因为我的主宰似乎安装在其他地方。现在这里是输出

    fizzy@li136-198:~$ sudo /etc/init.d/juggernaut start
    + PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    + DAEMON=/usr/local/bin/juggernaut
    + NAME=Juggernaut2
    + DESC=Juggernaut2
    + PIDFILE=/var/run/juggernaut.pid
    + test -x /usr/local/bin/juggernaut
    + set -e
    + case "$1" in
    + echo -n 'Starting Juggernaut2: '
    Starting Juggernaut2: + touch /var/run/juggernaut.pid
    + chown juggernaut:juggernaut /var/run/juggernaut.pid
    + start-stop-daemon --start --quiet --umask 007 --pidfile /var/run/juggernaut.pid --chuid juggernaut:juggernaut --exec /usr/local/bin/juggernaut
    20 Sep 06:41:16 - Your node instance does not have root privileges. This means that the flash XML policy file will be served inline instead of on port 843. This will slow down initial connections slightly.
    20 Sep 06:41:16 - socket.io ready - accepting connections

    node.js:134
            throw e; // process.nextTick error, or 'error' event on first tick
            ^
    Error: EADDRINUSE, Address already in use
        at Server._doListen (net.js:1106:5)
        at net.js:1077:14
        at Object.lookup (dns.js:153:45)
        at Server.listen (net.js:1071:20)
        at Object.listen (/usr/local/lib/node_modules/juggernaut/lib/juggernaut/server.js:51:21)
        at Object.listen (/usr/local/lib/node_modules/juggernaut/lib/juggernaut/index.js:9:10)
        at Object.<anonymous> (/usr/local/lib/node_modules/juggernaut/server.js:21:12)
        at Module._compile (module.js:402:26)
        at Object..js (module.js:408:10)
        at Module.load (module.js:334:31)
    + echo failed
    failed
    + exit 0

【问题讨论】:

你必须启动服务。 Juggernaut 没有运行,您只能在搜索中看到“grep”命令。将附加到我的答案中。 【参考方案1】:

您可能希望将 Juggernaut 和 Redis 作为服务/后台进程启动。将其作为服务启动可以将日志重定向到您可以定期检查的文件。

要创建在启动时自动启动的服务,您必须根据所使用的操作系统执行不同的操作:

在 Linux 中,您可以添加 init.d 脚本(Juggernaut Ubuntu example、Redis Ubuntu example) 在 Mac OS X 中,您使用 launchd。 在 Windows 中,您使用 this method。

确保在创建服务后通过将服务添加到默认运行级别(将在启动时自动启动)或手动启动它们来启动服务。

将服务添加到默认运行级别 (Linux),也是上述两个 Linux 教程的一部分:

sudo update-rc.d -f juggernaut defaults
sudo update-rc.d -f redis-server defaults

将服务添加到默认运行级别后,仍需要手动启动服务(Linux):

sudo /etc/init.d/juggernaut start
sudo /etc/init.d/redis-server start

【讨论】:

@Daan.. 这是关于剑圣的 Redis 呢? 我添加了一个 Ubuntu Redis 示例。这两种服务的想法是相同的。 @daan.. 我已按照这两个指南检查我添加的屏幕截图。无法访问 juggernaut 服务器的 application.js。 您检查过 /var/log 中的日志吗?可能存在一些陈旧的 pid 文件,或者端口正在使用中,或者权限问题。 我看不到 juggernaut 的任何日志。redis 有一个日志,但 juggernaut 没有。检查我在问题中的编辑..【参考方案2】:

我遇到了同样的问题(使用 Ubuntu 12.04 LTS)。使用upstart 为我做到了。

创建一个包含以下内容的文件“juggernaut.conf”:

start on filesystem and started networking
stop on shutdown

script
    # We found $HOME is needed. Without it, we ran into problems
    export HOME="/root"

    exec /usr/local/bin/juggernaut 2>&1 >> /var/log/juggernaut.log
end script

将此文件保存在 /etc/init/(不是 init.d)中并使其可执行(chmod +x)。就是这样,如果服务器启动,Juggernaut 作为一个守护进程运行。

注意:在 juggernaut 本身的 juggernaut.log 旁边,有一个 juggernaut.log 位于 /var/log/upstart/ 中,其中记录了 upstart 尝试启动 juggernaut 的信息。

我或多或少地从this blog 复制粘贴了上述脚本。但是,那里显示的脚本以:

开头
 start on startup

这对我不起作用,因为文件系统在启动时没有正确安装,所以不可能创建 juggernaut.log(只读文件系统错误)。感谢this post on serverfault 解决了这个问题。

【讨论】:

以上是关于如何在生产模式下运行 redis 服务器和 juggernaut 服务器的主要内容,如果未能解决你的问题,请参考以下文章

TypeORM - 如何在生产模式下创建新表并自动运行迁移?

redis消息队列有没有

Redis消息队列

生产环境redis备份与恢复

Dart:如何在调试和生产模式下使用不同的设置?

如何在生产模式下构建 Ionic 应用程序,Ionic 构建的行为不同