8

Most of the time when I reboot my Ubunutu server, I get "Waiting for Redis to shutdown…" over and over and it never stops until I force reboot. What could cause this?

I have http://godrb.com/ monitoring that resque stays running, so it could be related to that.

99miles
  • 361
  • 3
  • 6
  • 16
  • Is redis actually running as the PID that it has in the pidfile? Ubuntu will try to shut it down by killing it using something like `kill $(cat /var/run/redis.pid)` or something along those lines. If the pid file is incorrect, it will fail at killing redis. – cjc Feb 10 '12 at 23:20
  • 1
    Actually, if you're using god, you should probably, uh, kill god before anything else. – cjc Feb 10 '12 at 23:41
  • Ok, thanks. So I need to manually kill god before each reboot? – 99miles Feb 13 '12 at 20:46
  • Try this: make sure god is stopped before the reboot, and see if the problem happens. – cjc Feb 13 '12 at 21:19
  • The pid files (there are 2 resque processes running) are correct. I can kill the processes in the way you suggested. Now what can I do to not have to manually stop them before every reboot? – 99miles Feb 14 '12 at 04:28
  • You can put the manual process into a script that gets invoked by the init process on reboot/shutdown, something in /etc/init.d/ (with the customary symlink from /etc/rc[56].d/) – cjc Feb 14 '12 at 10:51
  • Thanks. It turns out God has nothing to do with it. It's just the Redis processes. Seems weird that I'd have to go this far to have them gracefully quit. – 99miles Feb 15 '12 at 02:37

4 Answers4

9

Do you have Redis listening on an interface other than localhost or 127.0.0.1? If so, the stop command is never being sent to the right interface, as the official Redis init template fails to include the host address.

In the /etc/init.d/redis files I’ve worked with, I had to define REDISHOST=10.150.0.18 and then on line 30 (look for “shutdown”) add that host argument:

$CLIEXEC -h $REDISHOST -p $REDISPORT shutdown
parhamr
  • 270
  • 2
  • 7
4

If you were like me, you required a password (requirepass) in your redis.conf. the redis-cli command won't respond without the password now.

In the first few lines of your /etc/init.d/redis file look for CLIEXEC and change the default

CLIEXEC=/usr/local/bin/redis-cli

to

CLIEXEC="/usr/local/bin/redis-cli -a <password>"

Please take note of the quotes.

When I did this I didn't have to include the -h $REDISHOST parameters.

See here for the source of the idea: https://groups.google.com/forum/#!topic/redis-db/ITtbA1S-GGg

Josh
  • 251
  • 2
  • 6
  • 1
    That fixed the issue for me; however if you copy/paste this to replace the entire line please note that `CLIEEXEC` is misspelled. I don't have the reputation score to edit it myself. – realMarkusSchmidt Jan 06 '15 at 17:14
2

The conversation in this list can solve your problem:

Modify your init script to use '-a' (auth) in the redis-cli call.

CLIEXEC="/usr/local/bin/redis-cli -a password"

In other words, the problem is the fact that you have to enter the Redis password to stop the service. Modifying the /etc/init.d/redis_port script (or any other init script you might have) with -a password will solve it.

0

you can kill the redis process:

$ ps -ef|grep "redis"

# kill $(cat /var/run/redis.pid)
dawud
  • 14,918
  • 3
  • 41
  • 61