Linux: Java 从 Upstart 调用的程序无法访问 mysql 数据库

Linux: Java program called from Upstart cannot access mysql database

我正在开发一个简单的 java 后台进程,它处理来自套接字连接的数据,然后使用 mysql 连接器 JDBC 驱动程序建立到数据库的连接,其中包含此信息被储存了。我想使用 upstart 将该程序用作服务,但在初始化我的服务后,在第一次上传尝试访问 JDBC 驱动程序以将数据插入数据库后,该过程将失败(不会在 jdbc 注册,但是这是我监视输出的最佳假设,尽管堆栈跟踪从未显示在我的日志中)。如果我从程序中的 catch 语句中删除 exit 调用,我可以看到进程不断接收上传,但实际上没有数据存储在 mysql 数据库中。

当 运行 从控制台正常运行 java 程序时,它可以毫无问题地执行。下面新贵 .conf 的部分指向我可以 运行 没有任何问题的同一个程序。

script

echo $$ > /var/run/uploadclient.pid
exec java -cp /user/server UploadProgram >> /home/user/upload.log

end script

有没有人听说过这样的问题?

我想我明白了...当 运行 一个 java 程序通过 upstart 时,它出于某种原因隐藏了 stacktrack 错误。这可以通过使用 StringWriter 和 PrinterWriter 捕获堆栈跟踪然后使用常规 System.out.println() 打印出错误来克服。

问题最终是,即使最初的 class 是使用 jdbc 连接器新贵编译的,也需要它在执行期间位于 class 路径中。

exec java -cp .:/user/jdbc.jar:/user/server UploadProgram >> /home/user/upload.log

问题解决了。