我编写了一个程序(称为威士忌酒),现在我想在启动机器(我正在用它创建自主船的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
。
有人知道我在做什么错吗?
检查您的运行脚本。应该有shebang。如果没有,请在脚本顶部添加#!/bin/bash
并给出绝对路径,例如ExecStart=/bin/bash /home/pi/whisky/run
当脚本本身或其解释器无法执行时,通常会看到错误消息(代码=退出,状态= 203 / EXEC)。>
[其他可能的原因: