【问题标题】:Systemd service failing on startupSystemd 服务在启动时失败
【发布时间】:2016-11-10 09:46:06
【问题描述】:

我试图让 nodejs 服务器在启动时运行,所以我创建了以下 systemd 单元文件:

[Unit]
Description=TI SensorTag Communicator
After=network.target

[Service]
ExecStart=/usr/bin/node /home/pi/sensortag-comm/sensortag.js
User=root

[Install]
WantedBy=multi-user.target

我不确定我在这里做错了什么。它似乎在 nodejs 脚本启动之前就失败了,因为没有发生日志记录。我的脚本依赖于 mysql 5.5(我认为这是我遇到问题的地方)。任何见解,甚至是不同的解决方案都将不胜感激。

而且,一旦我登录到系统,它运行良好。

更新

该服务已启用,并且正在通过 journalctl 进行记录。我会在 2016 年 7 月 11 日更新结果。

不知道为什么它第一次没有工作,但是在检查 journalctl 时,问题是 100% MySQL 没有启动。我再次将其更改为After=MySQL.service,并且效果很好!

【问题讨论】:

    标签: node.js systemd


    【解决方案1】:

    如果在journalctl 的输出中根本没有提及该服务,则可能表明该服务未启用 以在启动时启动。

    让您在下次启动测试之前运行systemctl enable my-unit-name

    此外,由于您依赖于 MySQL 的启动和运行,因此您应该使用以下内容声明它:After=mysql.service。确切的服务名称可能取决于您没有说明的 Linux 发行版。

    添加User=root 不会增加任何内容,因为无论如何默认情况下系统单元都将由root 运行。

    当您说“失败”时,您没有指定它是在启动时失败,还是在 systemctl start my-unit-name 运行的测试中失败。

    在尝试启动服务后,如果您运行 journalctl -u my-unit.name.service,则应该会有日志记录。

    您还可以考虑将StandardOutput=journal 添加到您的单元文件中,以确保您也从正在运行的服务中捕获输出。

    【讨论】:

    • 对不起,我没有更清楚,该服务已启用,它正在尝试在启动时启动。直到星期一我才能访问机器,然后用journalctl -u sensortag.service 的结果更新问题。需要注意的是,mysql 5.5 使用 systemv 而不是 systemd(机器是树莓派,我不倾向于设置反向端口)所以尝试After=mysql.service 之前似乎没有解决问题,但问题可能出在其他地方.再次感谢您迄今为止的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2020-03-25
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多