如何在 Ubuntu 中正确创建服务?

如何在 Ubuntu 中正确创建服务?

我有一台装有 Ubuntu 22.04.2 LTS 的服务器,我需要创建一个在该服务器上运行的服务。我发现这个答案其中详细说明了如何创建和启用服务,但我的服务失败了失败,结果为“退出代码”

以下是我创建服务所执行的步骤:

  1. 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

  1. 我运行systemctl enable scrapyd.service后终端输出Created symlink /etc/systemd/system/multi-user.target.wants/scrapyd.service → /lib/systemd/system/scrapyd.service.

  2. 我跑了systemctl start scrapyd.service(没有输出)

  3. 最后我运行了一下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 上设置新服务的正确方法是什么?

  1. 任何服务创建(例如,未由包安装的)应该进入/etc/systemd/system/
  2. 创建或更改服务后,您必须运行systemctl daemon-reload
  3. 通常,如果您的服务出现故障,有两种主要方法可以解决问题(我认为):
    1. 运行journalctl -u [your_service]以显示服务日志。这可能会或可能不会显示有用的信息。
    2. ExecStart=尝试运行手动指定的任何内容根据用户指定默认情况下User=,如果未指定,则为 root。

对于您来说,答案非常简单,因为您自己也这么说过:

如果我进入 /usr/local/bin/,则没有 scrapyd。

因此,您正在尝试启动一个指向不存在的文件的服务。

如果scrapyd在其他地方存在,您可能可以更改指令ExecStart=以匹配,如果尚未安装,则需要安装它 - 这不是 systemd 问题。

相关内容