【问题标题】:Script not running on start up, systemd ubuntu脚本在启动时未运行,systemd ubuntu
【发布时间】:2016-10-10 15:43:04
【问题描述】:

我目前正在尝试在我的 Ubuntu 服务器打开时启动 Luigid,我尝试了几种技术,包括 rc.local、cronjob(@reboot)、upstart、systemd,但它们似乎都没有工作。

我应该指出,如果我手动执行命令,该命令运行良好,我只需要它在启动时运行。在这一点上,我真的不担心我用哪种方式让它工作,所以这里有一些我尝试过的东西 -

Cron:

二手

sudo crontab -e

进入

@reboot luigid --background --logdir /home/myuser/luigilog

系统化:

我在 /usr/bin 中有一个名为 luigid 的脚本,其中包含以下内容,它被标记为可执行文件,我已经尝试过使用和不使用“exit 0”,担心可能需要正确的退出代码 -

#!/bin/sh
exec luigid --background --logdir /home/myuser/luigilog

和 /etc/systemd/system/ 中名为 luigid.service 的服务文件 -

[Unit]
Description=Luigid Service

[Service]
Type=forking
ExecStart=/usr/bin/luigid

[Install]
WantedBy=multi-user.target

我尝试过分叉(并在服务和 lugid 命令中指定 PIDfile,oneshot 和简单的类型都没有运气。

我已使用 -

启用该服务
systemctl enable luigid.service

它似乎尝试启动服务,因为使用检查状态

systemctl status luigid.service

表演

luigid.service - Luigid Service
   Loaded: loaded (/etc/systemd/system/luigid.service; enabled; vendor preset: enabled)
   Active: failed (Result: timeout) since Mon 2016-10-10 15:18:00 UTC; 18min ago

Oct 10 15:16:29 Analytics systemd[1]: Starting Luigid Service...
Oct 10 15:18:00 Analytics systemd[1]: luigid.service: Start operation timed out. Terminating.
Oct 10 15:18:00 Analytics systemd[1]: Failed to start Luigid Service.
Oct 10 15:18:00 Analytics systemd[1]: luigid.service: Unit entered failed state.
Oct 10 15:18:00 Analytics systemd[1]: luigid.service: Failed with result 'timeout'.

肯定有什么明显的我遗漏了,让命令在启动时运行真的没那么难!

【问题讨论】:

    标签: ubuntu crontab systemd luigi


    【解决方案1】:

    查看启动选项:如果服务稍后崩溃,“rc.local”和“cron @reboot”都不会帮助您,因此它们并不理想。由于您似乎拥有基于 systemd 的系统,因此 Upstart 并不是一个真正的选择。 systemd 是一个很好的选择,因为它不仅会启动您的进程,还会在它崩溃时重新启动它。

    我不知道Type= 的正确选项对于此服务是什么,但这确实很重要。检查man systemd.serviceType= 的文档,以确定哪个适合您的服务。

    您的包装脚本不应该是必需的。您应该能够拥有这样的ExecStart= 行:

    ExecStart=/usr/bin/luigid --background --logdir /home/myuser/luigilog
    

    如果您还没有尝试过这种组合,我也会尝试删除 --background 选项并将 Type= 设置为 simple

    如果你不能让它工作,试着让你的守护进程提供更详细的日志来说明它为什么没有启动,或者在你的ExecStart=行的开头添加/usr/bin/strace来获取详细的日志记录二进制文件在启动期间进行的系统调用。最后几个电话之一可能指向它挂在哪里。

    【讨论】:

    • 很棒 - 感谢您的帮助。最终解决方案是使用 Type=Simple,删除 --background 标志,并指定服务运行的用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2017-03-31
    • 2014-08-22
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多