在我的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/nerz
在nerz.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
并重新启动服务器。
1条答案
按热度按时间tvokkenx1#
单位文件实际****错误,应该是
ExecStart=/home/myname/projects/nerz/target/release/nerz
。