我在 /etc/init 中有一个 Upstart conf 文件,如果我像这样手动启动它,它可以正常启动:
sudo initctl start myconf
如果我不使用 sudo 命令来运行它,我会收到错误 name=(unset) 错误,这是由于用户权限造成的,但当 Upstart 启动时在系统启动时初始化作业时,这不应该是问题,对吧?(因为这些都是由 root 运行的)。
脚本内容如下:
start on runlevel [2345]
stop on runlevel [^2345]
exec /spatial/server_init.sh
...server_init.sh 运行基于 python 脚本的服务器。当我登录 shell 后立即检查脚本的状态时,它显示停止/等待。我还尝试使用“start on net-device-up”启动 conf 文件,但没有任何变化。有没有办法查看 Upstart 系统日志或类似的东西来帮助我调试问题。
谢谢
答案1
尝试:
/var/log/upstart/JOBNAME.log
您可能需要考虑在调试时将其转换为任务。
从空间开始 任务 执行/spatial/server_init.sh
然后从控制台:
initctl 发出空间启动 initctl 状态空间启动
答案2
好的,找到了一种方法,但它只在错误发生在脚本正在执行的程序中时才有效(当然,如果该程序返回错误消息),而不是 Upstart 本身,但这就是我在这种情况下所需要的。我所做的是将程序输出重定向到日志文件,如下所示:
exec /spatial/server_init.sh >> /spatial/ogc.log 2>&1
至于其他,我发现你可以增加 Upstart 的详细程度,所以如果我需要的话,我会从那里开始。
答案3
- 检查 upstart 目录是否存在:/var/log/upstart(如果不存在则创建目录)
通过以下方式检查你的 upstart 版本:初始化版本或者apt-cache 策略 upstart
对于 v1.4 之前的所有 Upstart 版本,控制台的默认值为控制台无从 Upstart 1.4 开始,默认值为控制台日志。
- 添加控制台日志进入你的新贵(在剧本阶段之前)
- 您的日志将位于:/var/log/upstart/“upstart-JOBNAME”.log
例子 :
控制台日志
脚本
exec /spatial/server_init.sh
结束脚本
控制台日志- 将标准输入连接到 /dev/null。标准输出和标准错误连接到伪终端的一端,这样,对于系统作业,任何作业输出都会自动记录到目录 /var/log/upstart/ 中的文件中,对于会话作业,则记录到 $XDG_CACHE_HOME/upstart/(或 $HOME/.cache/upstart/(如果未设置 $XDG_CACHE_HOME))中的文件中。
控制台无- 将作业的标准输入、标准输出和标准错误文件描述符连接到 /dev/null。
有关控制台的更多信息,请查看以下链接: