Systemd 服务:无法发出方法调用:单元服务失败

Systemd 服务:无法发出方法调用:单元服务失败

我正在尝试在我的 VPS 中创建自定义服务。但是,它不允许我运行它。它显示以下内容。我不确定发生了什么,但当我在 Ubuntu 笔记本电脑上运行它时,它运行正常。可能是什么问题?

sudo systemctl 启动 websocket.service

Failed to issue method call: Unit websocket.service failed to load: No such file or directory. See system logs and 'systemctl status websocket.service' for details.

猫/lib/systemd/system/websocket.service

[Unit]
Description=php webSocket
After=syslog.target network.target

[Service]
User=root

Type=simple
ExecStart=/usr/bin/webs.sh
TimeoutStopSec=20
KillMode=process
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target
Alias=websocket.service

猫/usr/bin/webs.sh

#!/bin/bash
### BEGIN INIT INFO
# Provides:          webSocket
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: php webSocket
# Description:       php webSocket
### END INIT INFO
/usr/bin/php /path/to/server.php

我尝试过systemctl daemon-reload,但得到以下结果

Attempted to remove disk file system, and we can't allow that.
Ignoring /etc/systemd/system/multi-user.target.wants/ssh.service -> /lib/systemd/system/ssh.service for systemd deputy init
Ignoring /etc/systemd/system/multi-user.target.wants/rsyslog.service -> /lib/systemd/system/rsyslog.service for systemd deputy init
Ignoring /etc/systemd/system/multi-user.target.wants/bind9.service -> /lib/systemd/system/bind9.service for systemd deputy init
Ignoring /etc/systemd/system/timers.target.wants/phpsessionclean.timer -> /lib/systemd/system/phpsessionclean.timer for systemd deputy init

有人能告诉我发生了什么事吗?

这是服务文件的权限:

-rwxr-xr-x 1 root root  264 Feb  6 05:06 websocket.service*

这是 bash 文件:

-rwxr-xr-x 1 root root 349 Feb  6 05:02 webs.sh*

我将 webs.sh 文件更改为/usr/bin/路径并按照@TeroKilkanen 所述更新了文件,但仍然遇到同样的问题。

答案1

这里的一个问题是您将脚本添加到根目录,而那里不是放置脚本的地方。/usr/local/bin对于这样的脚本来说,是更好的地方。

第二个问题是您的 shebang 不正确。Shebang 仅包含用于执行脚本的可执行文件的路径,而不包含任何参数。这就是导致错误的原因No such file or directory.https://unix.stackexchange.com/questions/63979/shebang-line-with-usr-bin-env-command-argument-fails-on-linux进一步说明此行为。

您可以改用这种方法:

为了webs.sh使用这个:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          webSocket
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: php webSocket
# Description:       php webSocket
### END INIT INFO
/usr/bin/php /path/to/server.php

记得赋予该文件可执行权限。

我暂时还不会担心迈克尔的评论,systemd 输出的其余部分可能是这个错误设置的症状。

相关内容