我有一台装有 Ubuntu 22.04.2 LTS 的服务器,我需要创建一个在该服务器上运行的服务。我发现这个答案其中详细说明了如何创建和启用服务,但我的服务失败了失败,结果为“退出代码”。
以下是我创建服务所执行的步骤:
sudo nano /lib/systemd/system/scrapyd.service
[Unit] Description=Scrapyd service After=network.target [Service] User=root Group=root WorkingDirectory=/home/projects ExecStart=/usr/local/bin/scrapyd [Install] WantedBy=multi-user.target
/主页/项目是我的项目将使用该scrapyd
服务的目录。ExecStart
- 我使用了与“教程”中相同的路径。如果我cd
进入/usr/local/bin/
,则没有scrapyd。
我运行
systemctl enable scrapyd.service
后终端输出Created symlink /etc/systemd/system/multi-user.target.wants/scrapyd.service → /lib/systemd/system/scrapyd.service.
我跑了
systemctl start scrapyd.service
(没有输出)最后我运行了一下
systemctl status scrapyd.service
,出现了这个错误:
× scrapyd.service - Scrapyd service Loaded: loaded (/lib/systemd/system/scrapyd.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Sun 2024-04-21 20:43:34 UTC; 41s ago Process: 792557 ExecStart=/usr/local/bin/scrapyd (code=exited, status=203/EXEC) Main PID: 792557 (code=exited, status=203/EXEC) CPU: 2ms Apr 21 20:43:34 SERVER systemd[1]: Started Scrapyd service. Apr 21 20:43:34 SERVER systemd[1]: scrapyd.service: Main process exited, code=exited, status=203/EXEC Apr 21 20:43:34 SERVER systemd[1]: scrapyd.service: Failed with result 'exit-code'.
在 Ubuntu 上设置新服务的正确方法是什么?
答案1
在 Ubuntu 上设置新服务的正确方法是什么?
- 任何服务你创建(例如,未由包安装的)应该进入
/etc/systemd/system/
- 创建或更改服务后,您必须运行
systemctl daemon-reload
。 - 通常,如果您的服务出现故障,有两种主要方法可以解决问题(我认为):
- 运行
journalctl -u [your_service]
以显示服务日志。这可能会或可能不会显示有用的信息。 ExecStart=
尝试运行手动指定的任何内容根据用户指定默认情况下User=
,如果未指定,则为 root。
- 运行
对于您来说,答案非常简单,因为您自己也这么说过:
如果我进入 /usr/local/bin/,则没有 scrapyd。
因此,您正在尝试启动一个指向不存在的文件的服务。
如果scrapyd
在其他地方存在,您可能可以更改指令ExecStart=
以匹配,如果尚未安装,则需要安装它 - 这不是 systemd 问题。