我正在尝试在我的Ubuntu服务器打开时启动Luigid,我尝试了几种技术,包括rc.local,cronjob(@reboot),upstart,systemd,但它们似乎都没有工作。
我应该指出,如果我手动执行该命令运行正常,我只需要它在启动时运行。在这一点上,我真的没有任何关注我的工作方式,所以这里有一些我尝试过的东西 -
的Cron:
使用
sudo crontab -e
并输入
@reboot luigid --background --logdir /home/myuser/luigilog
Systemd:
我在/ 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
我试过forking(并在服务和lugid命令中指定PIDfile,somehot和simple作为没有运气的类型。
我已使用 -
启用了该服务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'.
必须有一些明显我缺失的东西,在启动时运行命令真的不是很难!
答案 0 :(得分:4)
查看启动选项:" rc.local"和" cron @ reboot"如果服务稍后崩溃,它会帮助你,所以它们并不理想。既然看起来你有一个基于systemd的系统,那么Upstart并不是一个真正的选择。 systemd
是一个很好的选择,因为它不仅可以启动您的流程,还可以在崩溃时重新启动它。
我不知道Type=
对于此服务的正确选项,但它确实很重要。查看Type=
中man systemd.service
的文档,以确定哪一个对您的服务是正确的。
不应该要求您的包装脚本。您应该能够拥有ExecStart=
这样的行:
ExecStart=/usr/bin/luigid --background --logdir /home/myuser/luigilog
如果您还没有尝试过这种组合,我还会尝试删除--background
选项并将Type=
设置为simple
。
如果你无法让它发挥作用,请尝试让你的守护进程提供更详细的日志记录,说明它无法启动的原因,或者将/usr/bin/strace
添加到ExecStart=
的开头。 1}}行以获取二进制文件在启动期间进行的系统调用的详细日志记录。最后的几个电话之一可能指向它挂起的地方。