如何在生产模式下运行 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 服务器的主要内容,如果未能解决你的问题,请参考以下文章