【问题标题】:systemd service doesn't start silently. How to debug?systemd 服务不会静默启动。如何调试?
【发布时间】:2020-07-01 17:18:30
【问题描述】:

我编写了一个程序(称为威士忌),现在我想在启动机器时启动它(我正在使用它创建自主船的 Raspberry Pi)。于是我创建了文件/lib/systemd/system/whisky.service

[Unit]
Description=Whisky Boat Program
After=network.target
StartLimitIntervalSec=0

[Service]
ExecStart=/home/pi/whisky/run
KillMode=process
IgnoreSIGPIPE=true
Restart=always
RestartSec=3
User=root
Type=simple

[Install]
WantedBy=multi-user.target

我使用systemd-analyze verify whisky.service 验证了该文件的 systemd 格式是否正确。

当我现在运行sudo systemctl start whisky 时,我没有得到任何输出(表明没有错误)。

sudo systemctl status whisky 给了我以下输出:

* whisky.service - Whisky Boat Program
   Loaded: loaded (/lib/systemd/system/whisky.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Fri 2020-03-20 15:03:35 CET; 792ms ago
  Process: 8621 ExecStart=/home/pi/whisky/run (code=exited, status=203/EXEC)
 Main PID: 8621 (code=exited, status=203/EXEC)

Mar 20 15:03:35 raspberrypi systemd[1]: whisky.service: Unit entered failed state.
Mar 20 15:03:35 raspberrypi systemd[1]: whisky.service: Failed with result 'exit-code'.

文件/home/pi/whisky/run 实际上是一个bash 脚本,它反过来启动程序。为了检查 systemd 是否启动了那个 bash 脚本,我在其中添加了第一行:mkdir /home/pi/RUNNING_FROM_SYSTEMD。虽然没有创建目录RUNNING_FROM_SYSTEMD,所以似乎systemd甚至没有尝试运行文件/home/pi/whisky/run

有人知道我在这里做错了什么吗?

【问题讨论】:

  • journalctl -xr 的输出是什么?

标签: linux bash service systemd systemctl


【解决方案1】:

检查您的运行脚本。应该有shebang。如果没有,请在脚本顶部添加 #!/bin/bash 并提供绝对路径,例如 ExecStart=/bin/bash /home/pi/whisky/run

错误消息(code=exited, status=203/EXEC)经常出现在脚本本身或其解释器无法执行时。

其他可能的原因可能:

  • 脚本路径错误
  • 脚本不可执行
  • 没有 shebang(第一行)或 shebang 中的路径错误
  • 脚本中的内部文件可能缺少访问权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 2015-11-17
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多