systemd服务不会静默启动。如何调试?

问题描述 投票:0回答:1

我编写了一个程序(称为威士忌酒),现在我想在启动机器(我正在用它创建自主船的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

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

linux bash service systemd systemctl
1个回答
0
投票

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

当脚本本身或其解释器无法执行时,通常会看到错误消息(代码=退出,状态= 203 / EXEC)。>

[其他可能的原因:

  • 错误的脚本路径
  • 脚本不可执行
  • 没有shebang(第一行)或shebang中的错误路径
  • 脚本中的内部文件可能缺少访问权限。
© www.soinside.com 2019 - 2024. All rights reserved.