«cassandra.service» терпит неудачу, когда я пытаюсь создать для него службу «systemd»

Я пытаюсь создать systemdcassandra.service. Я скачал бинарные коды и установил их на Ubuntu 22.04 в каталоге home/a/dons/cassandra. Затем попытался создать следующий файл /etc/systemd/system/cassandra.service, который я нашел в Интернете:

[Unit]
Description=Cassandra Cluster Node Daemon

[Service]
Type=forking
User=cassandra
ExecStartPre=/usr/bin/echo "Starting Cassandra Daemon"
ExecStart=/home/a/dons/cassandra/bin/cassandra
ExecStartPost=/usr/bin/echo "Cassandra Daemon Running"

ExecStopPost=/usr/bin/rm -rf /data/cassandra/saved_caches;/usr/bin/echo "Cassandra Daemon Stopped"

[Install]
WantedBy=default.target

Потом попробовал sudo systemctl daemon-reload и после этого попробовал sudo systemctl status cassandra но результат такой:

× cassandra.service - Cassandra Cluster Node Daemon
     Loaded: loaded (/etc/systemd/system/cassandra.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2022-12-20 18:55:41 PST; 1min 17s ago
    Process: 477388 ExecStartPre=/usr/bin/echo Starting Cassandra Daemon (code=exited, status=217/USER)
    Process: 477389 ExecStopPost=/usr/bin/rm -rf /data/cassandra/saved_caches;/usr/bin/echo Cassandra Daemon Stopped (code=exited,>
        CPU: 4ms

Dec 20 18:55:41 a systemd[1]: Starting Cassandra Cluster Node Daemon...
Dec 20 18:55:41 a systemd[477388]: cassandra.service: Failed to determine user credentials: No such process
Dec 20 18:55:41 a systemd[477388]: cassandra.service: Failed at step USER spawning /usr/bin/echo: No such process
Dec 20 18:55:41 a systemd[1]: cassandra.service: Control process exited, code=exited, status=217/USER
Dec 20 18:55:41 a systemd[1]: cassandra.service: Control process exited, code=exited, status=217/USER
Dec 20 18:55:41 a systemd[1]: cassandra.service: Failed with result 'exit-code'.
Dec 20 18:55:41 a systemd[1]: Failed to start Cassandra Cluster Node Daemon.

SO — это платформа вопросов и ответов по программированию, и этот вопрос не о программировании. Вопросы об операционных системах, их утилитах, сети и оборудовании здесь не по теме. На какие темы здесь можно задать вопросы? . Пожалуйста, удалите это и задайте вопрос на Unix & Linux Stack Exchange Вопросы о systemd не по теме (см. тег)

Rob 23.12.2022 02:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что пользователь cassandra, вероятно, не существует в вашей системе.


Вот простой пример, показывающий тот же результат на моей машине (где пользователь noexist не существует):

$ systemctl cat simple.service
# /etc/systemd/system/simple.service
[Service]
User=noexist
ExecStart=/bin/true

$ sudo systemctl start simple.service
$ sudo systemctl status simple.service
× simple.service - A simple service
     Loaded: loaded (/etc/systemd/system/simple.service; static)
     Active: failed (Result: exit-code) since Wed 2022-12-21 09:41:08 CET; 5s ago
   Duration: 413us
    Process: 3314 ExecStart=/bin/true (code=exited, status=217/USER)
   Main PID: 3314 (code=exited, status=217/USER)
        CPU: 0

Dec 21 09:41:08 systemd[1]: Started simple.service.
Dec 21 09:41:08 systemd[1]: simple.service: Main process exited, code=exited, status=217/USER
Dec 21 09:41:08 systemd[1]: simple.service: Failed with result 'exit-code'.

Важной частью здесь является status=217/USER. man systemd.exec говорит:

Код выхода Символическое имя Описание 217 EXIT_USER Не удалось определить или изменить учетные данные пользователя или настроить пространство имен пользователей. См. User=/PrivateUsers= выше.

Я думаю, что проблема связана с вашей установкой. Обычно вы не устанавливаете пакеты в /home. Кому принадлежит /home/a/dons/cassandra? Вероятно, это пользователь, от имени которого вы должны запускать это. Я часто думаю, что это пользователь a, но в общем systemd с большим количеством монтирований это может быть пользователь dons.

Обычно я устанавливаю пакеты через менеджер пакетов (например, apt install). Он содержит сценарии, которые настроят для вас всех необходимых пользователей и настроят ваши службы.

Я сделал быстрый поиск и обнаружил, что для cassandra существует пакет .deb:

https://cassandra.apache.org/doc/latest/cassandra/getting_started/installing.html#install-the-debian-packages


Если пакета не было, я часто пытался сделать из него пакет. Преимущество пакета в том, что он упрощает удаление или обновление программного обеспечения. Это довольно интенсивно и выходит за рамки этого ответа.


Если вы не хотите делать пакет, вы можете

  1. собрать из исходников и sudo make install DESTDIR=/usr/local. Это уже будет связано с зависимостями на вашей машине. Похоже, вы хотите использовать предварительно скомпилированные двоичные файлы (они, вероятно, не будут работать с точными версиями установленных вами зависимостей).
  2. Установите предварительно скомпилированные двоичные файлы в /opt/cassandra. Opt подходит для дополнительных, перемещаемых приложений, которые нельзя объединить с вашим основным пакетом.

Похоже, вы хотите пойти с (2) и просто установить двоичные файлы без компиляции для вашей системы.

После того, как двоичные файлы / файлы конфигурации будут на месте, они должны принадлежать root и доступны для чтения / исполняемого файла всем. Это означает, что любой пользователь может запускать программное обеспечение, но только root может его изменить. Это предотвращает замену cassandra чем-то вредоносным.

Однако cassandra, возможно, нужно будет где-то написать. Вам нужно выяснить, какие каталоги ему нужны. Это может быть относительно двоичного файла, или может быть относительно рабочего каталога, или может быть абсолютным путем. Если бы была возможность, я бы, наверное, указал на /var/lib/cassandra, но /opt/cassandra/var тоже разумно. Убедитесь, что этот каталог существует.

Затем создайте системного пользователя cassandra, чтобы вам не нужно было запускать его как основного пользователя или как root.

sudo adduser --system cassandra

Теперь убедитесь, что у cassandra есть права на запись в каталог данных:

sudo chown -R cassandra /opt/cassandra/var

Если у вас возникли проблемы с определением того, где должны находиться какие-либо каталоги var, я настоятельно рекомендую установить пакет *.deb. Все это уже сделано за вас в пакете deb.

Другие вопросы по теме