Я установил redis на Ubuntu 16.04 в соответствии с руководством digialtocean . Он использует systemd и должен запускаться при загрузке.
Я могу запустить Redis из cli
sudo systemctl start redis
, и он работает без ошибок или проблем. Однако, когда я перезагружаюсь, redis не запускается. Я пробовал несколько вещей, которые нашел через поиск в Google, но пока ничего не помогло:
В journalctl нет явной ошибки:
Lubuntu-16-04 systemd[1]: Starting Redis In-Memory Data Store...
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=799, just started
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 # Configuration loaded
Lubuntu-16-04 redis-server[799]: 799:C 12 Jul 10:34:12.532 * supervised by systemd, will signal readiness
Lubuntu-16-04 systemd[1]: Started Redis In-Memory Data Store.
Lubuntu-16-04 systemd[1]: redis.service: Main process exited, code=exited, status=1/FAILURE
Lubuntu-16-04 systemd[1]: redis.service: Control process exited, code=exited status=1
Lubuntu-16-04 systemd[1]: redis.service: Unit entered failed state.
Lubuntu-16-04 systemd[1]: redis.service: Failed with result 'exit-code'.
Lubuntu-16-04 systemd[1]: redis.service: Service hold-off time over, scheduling restart.
Lubuntu-16-04 systemd[1]: Stopped Redis In-Memory Data Store.
Этот блок повторяется 5 раз в журнале, а затем в конце журнала появляется это сообщение:
Lubuntu-16-04 systemd[1]: redis.service: Start request repeated too quickly.
Lubuntu-16-04 systemd[1]: Failed to start Redis In-Memory Data Store.
В redis log Я вижу следующее:
Creating Server TCP listening socket 192.168.XX.XXX:6379: bind: Cannot assign requested address
Я хочу разрешить удаленное соединение, поэтому я также привязываюсь к «внешнему» IP. Это вызывает сбой запуска Redis? Но при запуске вручную работает нормально. В чем причина проблемы?
Необходимо изменить конфигурацию systemd, и ИМХО неверно, как показано на digitalocean.
Конфигурации модуля systemd После
цель должна быть изменена:
[Unit]
Description=Redis In-Memory Data Store
After=network-online.target
В руководство это After = network.target
, которое согласно это руководство имеет очень мало значения, например. сеть, вероятно, еще не полностью готова, и, следовательно, привязка к внешнему IP не выполняется.