我正在尝试在我的 Linux 桌面机上运行 Sonar。我想让它在机子启动时自动启动,但它以我的身份运行是没问题的。
我创建了“~/.init/sonar.conf”,其中包含以下简单内容:
description "Sonar server"
start on startup
respawn
chdir ~/apps/sonar-3.2/bin
exec ~/apps/sonar-3.2/bin/linux-x86-64/sonar.sh start
我读到 Upstart 默认没有为用户作业配置,因此我编辑了“/etc/dbus-1/system.d/Upstart.conf”,注释掉现有的“”元素并将其替换为以下内容:
<policy context="default">
<allow send_destination="com.ubuntu.Upstart" send_interface="org.freedesktop.DBus.Introspectable"/>
<allow send_destination="com.ubuntu.Upstart" send_interface="org.freedesktop.DBus.Properties"/>
<allow send_destination="com.ubuntu.Upstart" send_interface="com.ubuntu.Upstart0_6"/>
<allow send_destination="com.ubuntu.Upstart" send_interface="com.ubuntu.Upstart0_6.Job"/>
<allow send_destination="com.ubuntu.Upstart" send_interface="com.ubuntu.Upstart0_6.Instance"/>
</policy>
当我执行“start sonar”时,我得到“start: Job failed to start”。我还执行了“initctl list | grep sonar”,得到“sonar stop/waiting”。
我该如何进一步排除此故障?
答案1
您的问题可能是您认为的startup
upstart 用途与它所用的功能不符。启动是系统 init 脚本启动期间发出的第一个事件之一。因此,您很可能遗漏了网络堆栈和驱动程序、文件系统等几乎所有内容。请仔细阅读手册页,了解启动事件的含义,以及启动的含义。
这是我用来检查和测试 upstart 服务的过程。
首先检查您的配置:
# silent if the config is valid
initctl check-config sonar
# reload the configuration to pick up latest changes
initctl reload-configuration
我还添加了一个脚本——它可以运行startup
——将 upstart 切换到调试日志记录模式:
sudo -s
cat <<EOCONF > /etc/init/upstart-debug.conf
description "enable debugging of upstart from within"
author "@dch__"
version "0.1"
start on startup
task
exec initctl log-priority debug
由于这是一项任务,因此它只运行一次。现在的结果是,您可以获得更多详细信息/var/log/dmesg
- 仅| grep init:
用于历史记录。
对于您的特定新贵工作,我会进行以下更改:
- 对于我运行的普通用户守护程序
start on started networking and filesystem
,它可以在 Quantal 和 Precise 上成功运行,但可能不适用于早期版本。 - 使用绝对路径而不是相对路径。
- 检查您的 sonar.sh 脚本是否分叉或守护进程,如果是,您可能需要添加
expect fork
或expect daemon
作为节。 - 最后,在 pre-exec 和 exec 脚本中加入
emit ...
一些节或 shellecho here
语句,并在相应的/var/log/upstart/sonar.log
.
答案2
对于 Upstart用户作业 以下 Upstart.conf 配置更改:https://gist.github.com/bradleyayers/1660182对我有用。
- 在 Ubuntu 12.04 上测试
- 我的(用户)工作在 ~/.init 中
- 保存 Upstart.conf 后无需重启
关于您的 sonar.conf -start on startup
可能为时过早。start on desktop-session-start
似乎更适合用户工作。