ubuntu 找不到Systemd单元“”,ExecStart目标““不可执行”

nbewdwxp  于 2022-11-02  发布在  其他
关注(0)|答案(1)|浏览(213)

在我的Ubuntu服务器上,我有一个systemd单元,它应该用一个简单的用户帐户(myname)启动/运行Web服务器。
simple-web-server

[Unit]
Description=Runs a webserver on 8080

[Service]
Type=simple
ExecStart=/projects/nerz/target/release/nerz
User=myname

[Install]
WantedBy=multi-user.target

这在过去工作得很好,直到我决定将我的webserver项目从simple-web-server重命名为nerz,方法是mv重命名文件夹,更新-的名称和.service文件中的路径,并重新编译项目以获得良好的效果。
现在,当我尝试启动或启用该单元时,我只会得到难以描述的错误:

myname@myserver:~/projects/nerz$ sudo systemctl start nerz.service
Failed to start nerz.service: Unit nerz.service not found.

systemd-analyze表示

myname@myserver:~/projects/nerz$ systemd-analyze verify nerz.service
nerz.service: Command /projects/nerz/target/release/nerz is not executable: No such file or directory

这说不通因为程序在运行

tmux
myname@myserver:~/projects/nerz$ target/release/nerz  | myname@myserver:~/projects/nerz$ curl localhost:8080
                                                      │hello world

操作系统版本为Ubuntu 22.04.1 LTS(GNU/Linux 5.15.0-52-通用x86_64)
nerz.servize位于我的cargo crate的根,则相对于~的整体层次结构为

~
|_ projects
  |_ nerz
    |_ nerz.service
    |_ target
      |_ release
        |_ nerz

stat表示服务文件

myname@myserver:~/projects/nerz$ stat nerz.service
  File: nerz.service
  Size: 160             Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 383348      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    myname)   Gid: ( 1000/myname)
Access: 2022-11-01 23:36:18.150504526 +0100
Modify: 2022-11-01 23:35:29.486554759 +0100
Change: 2022-11-01 23:35:29.486554759 +0100
 Birth: 2022-11-01 23:35:29.486554759 +0100

stat表示可执行文件

myname@myserver:~/projects/nerz$ stat target/release/nerz
  File: target/release/nerz
  Size: 6570808         Blocks: 12840      IO Block: 4096   regular file
Device: 801h/2049d      Inode: 785493      Links: 3
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/    myname)   Gid: ( 1000/    myname)
Access: 2022-10-29 06:57:05.161792452 +0200
Modify: 2022-10-29 06:01:13.851413444 +0200
Change: 2022-10-29 08:08:06.266181996 +0200
 Birth: 2022-10-29 06:01:13.183414115 +0200

我已经尝试了两种文件模式/权限的不同组合(虽然可能还不是正确的组合?)。通过移动内容和重新编译服务器,我想这是最有可能被破坏的东西,而不是立即可见的--因为除了更新路径外,我真的没有改变.service文件 * 内部 * 的任何东西。
我还尝试了ln-ing /usr/local/bin中的可执行文件

myname@myserver:~/projects/nerz$ stat /usr/local/bin/nerz
  File: /usr/local/bin/nerz
  Size: 6570808         Blocks: 12840      IO Block: 4096   regular file
Device: 801h/2049d      Inode: 785493      Links: 3
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/    myname)   Gid: ( 1000/    myserver)
Access: 2022-10-29 06:57:05.161792452 +0200
Modify: 2022-10-29 06:01:13.851413444 +0200
Change: 2022-11-01 23:47:51.569787530 +0100
 Birth: 2022-10-29 06:01:13.183414115 +0200

ExecStart=/usr/local/bin/nerznerz.service内,但这并没有什么区别。
我检查了旧的simple-web-server或新的nerz是否有任何奇怪的残差,但就我所知,没有任何---但也许我做错了?

myname@myserver:~/projects/nerz$ ls /etc/systemd/system
cloud-final.service.wants                   rescue.target.wants
cloud-init.target.wants                     sleep.target.wants
dbus-org.freedesktop.ModemManager1.service  snap-certbot-2344.mount
dbus-org.freedesktop.resolve1.service       snap-certbot-2414.mount
dbus-org.freedesktop.timesync1.service      snap.certbot.renew.service
default.target.wants                        snap.certbot.renew.service.d
display-manager.service.wants               snap.certbot.renew.timer
emergency.target.wants                      snap-core-13741.mount
final.target.wants                          snap-core-13886.mount
getty.target.wants                          snap-core20-1623.mount
graphical.target.wants                      snap-core20-1634.mount
iscsi.service                               sockets.target.wants
mdmonitor.service.wants                     sshd-keygen@.service.d
multipath-tools.service                     sshd.service
multi-user.target.wants                     sudo.service
network-online.target.wants                 sysinit.target.wants
oem-config.service.wants                    syslog.service
open-vm-tools.service.requires              timers.target.wants
paths.target.wants                          vmtoolsd.service
myname@myserver:~/projects/nerz$ systemctl status simple-web-server
Unit simple-web-server.service could not be found.
myname@myserver:~/projects/nerz$ systemctl status nerz.service
Unit nerz.service could not be found.

手动链接拷贝单元文件到/etc/systemd/system也没有成功:

myname@myserver:~/projects/nerz$ sudo ln nerz.service /etc/systemd/system
myname@myserver:~/projects/nerz$ sudo systemctl daemon-reload
myname@myserver:~/projects/nerz$ sudo systemctl status nerz
○ nerz.service - Runs a webserver on 8080
     Loaded: loaded (/etc/systemd/system/nerz.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
myname@myserver:~/projects/nerz$ sudo systemctl start nerz
myname@myserver:~/projects/nerz$ sudo systemctl status nerz
× nerz.service - Runs a webserver on 8080
     Loaded: loaded (/etc/systemd/system/nerz.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2022-11-02 00:09:39 CET; 5s ago
    Process: 23692 ExecStart=/projects/nerz/target/release/nerz (code=exited, status=203/EXEC)
   Main PID: 23692 (code=exited, status=203/EXEC)
        CPU: 1ms

Nov 02 00:09:39 myserver systemd[1]: Started Runs a webserver on 8080.
Nov 02 00:09:39 myserver systemd[23692]: nerz.service: Failed to locate executable /projects/nerz/target/release/nerz: No such file or directory
Nov 02 00:09:39 myserver systemd[23692]: nerz.service: Failed at step EXEC spawning /projects/nerz/target/release/nerz: No such file or directory
Nov 02 00:09:39 myserver systemd[1]: nerz.service: Main process exited, code=exited, status=203/EXEC
Nov 02 00:09:39 myserver systemd[1]: nerz.service: Failed with result 'exit-code'.

当然,我也多次运行systemctl daemon-reload并重新启动服务器。

tvokkenx

tvokkenx1#

单位文件实际****错误,应该是ExecStart=/home/myname/projects/nerz/target/release/nerz

相关问题