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

Linux:Upstart调用的Java程序无法访问mysql数据库,java,mysql,linux,upstart,Java,Mysql,Linux,Upstart,我正在开发一个简单的java后台进程,该进程处理来自套接字连接的数据,然后使用mysql连接器JDBC驱动程序建立到存储此信息的数据库的连接。我想使用upstart将程序用作服务,但在初始化服务后,在第一次上载尝试访问JDBC驱动程序以将数据插入数据库后,进程将失败(在JDBC寄存器上不会失败,但这是我监视输出的最佳假设,尽管我的日志中从未显示stacktrace)。如果我从程序中的catch语句中删除exit调用,我可以看到这个过程不断地接收上传,但实际上mysql数据库中不会存储任何数据 当

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

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

script

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

end script

以前有人听说过这样的问题吗?

我想我已经解决了。。。当通过upstart运行java程序时,出于某种原因,它会隐藏stacktrack错误。这可以通过使用StringWriter和PrinterWriter捕获stacktrace,然后使用常规的System.out.println()打印错误来克服

问题是,即使原始类是用jdbc连接器upstart编译的,但在执行过程中它仍需要位于类路径中

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

这就解决了问题。

您可以发布更多的调试信息吗?它是如何失败的?它是否在数据库日志中留下了一些错误?用户是否具有所需位置的权限?您的程序是否会抛出一些状态错误代码?