Я пытаюсь создать systemd
cassandra.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.
Проблема в том, что пользователь 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 говорит:
Я думаю, что проблема связана с вашей установкой. Обычно вы не устанавливаете пакеты в /home
. Кому принадлежит /home/a/dons/cassandra
? Вероятно, это пользователь, от имени которого вы должны запускать это. Я часто думаю, что это пользователь a
, но в общем systemd с большим количеством монтирований это может быть пользователь dons
.
Обычно я устанавливаю пакеты через менеджер пакетов (например, apt install
). Он содержит сценарии, которые настроят для вас всех необходимых пользователей и настроят ваши службы.
Я сделал быстрый поиск и обнаружил, что для cassandra существует пакет .deb
:
Если пакета не было, я часто пытался сделать из него пакет. Преимущество пакета в том, что он упрощает удаление или обновление программного обеспечения. Это довольно интенсивно и выходит за рамки этого ответа.
Если вы не хотите делать пакет, вы можете
sudo make install DESTDIR=/usr/local
. Это уже будет связано с зависимостями на вашей машине. Похоже, вы хотите использовать предварительно скомпилированные двоичные файлы (они, вероятно, не будут работать с точными версиями установленных вами зависимостей)./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.
SO — это платформа вопросов и ответов по программированию, и этот вопрос не о программировании. Вопросы об операционных системах, их утилитах, сети и оборудовании здесь не по теме. На какие темы здесь можно задать вопросы? . Пожалуйста, удалите это и задайте вопрос на Unix & Linux Stack Exchange Вопросы о systemd не по теме (см. тег)