ubuntu 当我尝试为“cassandra.service”创建“systemd”服务时,它失败了

mv1qrgav  于 2022-12-22  发布在  Cassandra
关注(0)|答案(1)|浏览(223)

我正在尝试创建一个systemdcassandra.service。我已经下载了二进制代码并将其安装在home/a/dons/cassandra目录下的Ubuntu 22.04上。然后尝试创建以下文件/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.
0md85ypi

0md85ypi1#

问题是您的系统上可能不存在用户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/USERman systemd.exec表示:
| 退出代码|符号名称|说明|
| - ------| - ------| - ------|
| 二一七|退出用户|无法确定或更改用户凭据,或设置用户命名空间。请参阅上面的User =/PrivateUsers =。|
我认为这个问题与你的安装有关。通常你不会安装包到/home。谁拥有/home/a/dons/cassandra?这可能是你应该运行这个的用户。我经常猜测它是用户a,但是在有很多挂载的共享systemd上,它可能是用户dons
我通常会通过软件包管理器(iIndiee.apt install)安装软件包。这包含了为您设置任何所需用户和设置您的服务的脚本。
我做了一个快速搜索,发现确实存在一个cassandra的.deb软件包:
https://cassandra.apache.org/doc/latest/cassandra/getting_started/installing.html#installing-the-debian-packages
如果没有可用的软件包,我通常会尝试用它来做一个软件包。软件包的好处是它使卸载或升级软件变得更容易。这是相当激烈的,超出了这个答案的范围。
如果你不想打包,你可以
1.从源代码和sudo make install DESTDIR=/usr/local构建。这将链接到您计算机上的依赖项。听起来您想使用预编译的二进制文件(这些文件可能无法在您安装的依赖项的确切版本上工作)。
1.将预编译的二进制文件安装到/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包中完成了。

相关问题