我正在使用 ruby on rails 应用程序实现聊天。我无法在生产模式下设置 juggernaut 服务器。
我跟着本指南设置 redis。并且它运行正常。
然后我跟着这是为了设置 juggernaut。但是当我尝试启动 juggernaut 时它却不工作。
下面是使用 grep 命令检查 redis 是否正常工作但 juggernaut 是否不正常工作的结果。
当我尝试停止/启动 redis 服务器时,它会给出输出,即:
Starting/Stopping redis-server: redis-server.
但当我对 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 是否存在,并且它是否是 juggernaut 组的成员?-- 是/是
cat /etc/group redis:x:1002: juggernaut:x:113: groups juggernaut juggernaut : juggernaut
运行 sudo 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
服务器已启动但不是作为后台进程/服务。
编辑
在调试模式下运行脚本:
+ 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
这是所有使用的端口
tcp 0 0 localhost.localdom:9312 *:* LISTEN
tcp 0 0 localhost.localdo:mysql *:* LISTEN
tcp 0 0 *:6379 *:* LISTEN
tcp 0 0 *:http-alt *:* LISTEN
tcp 0 0 *:www *:* LISTEN
tcp 0 0 localhost.localdo:52433 *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost.localdo:53784 *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
答案1
我要调试这种新贵问题的方法如下:编辑/etc/init.d/juggernaut
并更改顶部的 shebang 行以添加-x
,例如
#! /bin/bash -x
然后尝试启动服务,您应该会看到它打印调试信息,希望这可以清楚地说明问题所在。
更新:倒数第二行
+ test -x /usr/bin/juggernaut
对我来说 :-) 非常清楚,init 脚本正在中止,因为它认为 juggernaut 未安装。您需要更新该行以指向/usr/local/bin/juggernaut
。
更新:“地址正在使用”意味着另一个进程正在监听该套接字,可能是 juggernaut 的另一个副本。 netstat -tpl
会告诉你。