Redis не работает только при запуске
Redis не запускается каждый раз, когда я запускаю наш сервер CentOS 7/openvas. После загрузки сервера я могу вручную запустить Redis без каких-либо проблем, используя systemctl start redis.service
,
Ниже приведены соответствующие части из journalctl
Jan 29 06:29:28 openvas01 systemd[1]: Reached target Network is Online.
Jan 29 06:29:28 openvas01 systemd[1]: Starting Network is Online.
Jan 29 06:29:28 openvas01 systemd[1]: Started Azure Linux Agent.
Jan 29 06:29:28 openvas01 systemd[853]: Failed at step RUNTIME_DIRECTORY spawning /usr/bin/redis-server: File exists
Jan 29 06:29:28 openvas01 systemd[1]: Starting Azure Linux Agent...
Jan 29 06:29:28 openvas01 systemd[1]: Started DNS caching server..
Jan 29 06:29:28 openvas01 systemd[1]: Starting DNS caching server....
Jan 29 06:29:28 openvas01 systemd[1]: redis.service: main process exited, code=exited, status=233/RUNTIME_DIRECTORY
Jan 29 06:29:28 openvas01 systemd[860]: Failed at step RUNTIME_DIRECTORY spawning /usr/libexec/redis-shutdown: File exists
Jan 29 06:29:28 openvas01 systemd[1]: redis.service: control process exited, code=exited status=233
Jan 29 06:29:28 openvas01 systemd[1]: Failed to start Redis persistent key-value database.
Jan 29 06:29:28 openvas01 systemd[1]: Unit redis.service entered failed state.
Jan 29 06:29:28 openvas01 systemd[1]: redis.service failed.
Я не могу сказать, к какому файлу он предъявляет жалобы. /var/log/redis/redis.log
ничего не упоминает об этой проблеме запуска, так что я думаю, что это связано с systemd.
Я искал в Интернете и не нашел никаких очевидных решений. Служба не настроена на запуск в качестве демона, и у меня есть supervised systemd
в конфигурационном файле redis.
Есть идеи?
4 ответа
После некоторого устранения неполадок, я понял, что /var/run/redis
каталог создавался каким-то другим процессом, а не redis systemd
оказание услуг. Дальнейшее устранение неполадок показало, что администратор нашего сервера неожиданно создал /etc/tmpfiles.d/redis.conf
это создавало /var/run/redis
каталог перед обслуживанием. Удаление этого файла, в котором был только этот каталог, решило проблему.
Эта страница привела меня к ответу. В моем случае elasticsearch не запускался с ошибками:(code=exited, status=233/RUNTIME_DIRECTORY) Ошибка на этапе RUNTIME_DIRECTORY, порождающая /usr/share/elasticsearch/bin/systemd-entrypoint: файл существует
grep -R elasticsearch /etc/ | греп вар | grep run нашел старую конфигурацию, которая вручную создала mkdir /var/run/elasticsearch внутри /etc/rc.local. Итак, когда служба попыталась запустить папку, она уже была там.
TL;DR: отключите службу Redis, выполните сброс, перезагрузите, затем перезапустите и, наконец, снова включите службу.
У меня только что возникла такая же проблема на CentOS7.9 (Virtuzzo) после обновления Redis с Redis6 до Redis7. У меня есть несколько экземпляров по 1 или 2 для каждого отдельного веб-сайта, но я не осознавал, что только исходный redis.service был недоступен почти неделю, пока я не попытался перезапустить его после использования команды status:
systemctl status -l redis.service
redis.service - Redis persistent key-value database
Loaded: loaded
(/usr/lib/systemd/system/redis.service;
enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: failed (Result: exit-code) since Thu 2022-05-05 23:02:50 BST; 28s ago
Process: 6425 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf --daemonize no --supervised systemd (code=exited,
status=233/RUNTIME_DIRECTORY)
Main PID: 6425 (code=exited,
status=233/RUNTIME_DIRECTORY)
Перезапуск моих экземпляров (redis2, redis3 и т. д.) сработал во всех случаях, кроме этого.
Failed at step RUNTIME_DIRECTORY spawning /usr/bin/redis-server: File exists
redis.service: main process exited, code=exited, status=233/RUNTIME_DIRECTORY
Failed to start Redis persistent key-value database.
Unit redis.service entered failed state.
redis.service failed.
Что помогло мне без необходимости удалять какие-либо файлы или папки, так это отключить redis.service, затем использовать команду сброса неудачных служб, перезагрузить демон SystemD, запустить redis.service (теперь сработало в первый раз), а затем снова включить его. так что он должен автоматически перезапускаться в будущем.
Это были команды, вводите каждую строку по очереди...
systemctl disable redis
systemctl reset-failed
systemctl daemon-reload
systemctl start redis
systemctl enable redis
Outputs message: Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
systemctl status -l redis.service
Outputs message: redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled;
vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Thu 2022-05-05 23:08:03 BST; 31s ago
Main PID: 6899 (redis-server)
Status: "Ready to accept connections"
CGroup: /system.slice/redis.service
└─6899 /usr/bin/redis-server
127.0.0.1:6379 /var/lib/redis/redis.sock 6379 /etc/redis/redis.conf
Starting Redis persistent key-value database...
Started Redis persistent key-value database.
Попробуйте добавить в конфигурационный файл службы systemd
[Service]
Type=forking