jecinsはLinuxダイナミックライブラリの読み込みに影響を与えると発表しました.
junnkinsがアプリケーションをリリースする時、linuxダイナミックライブラリに対するロードは、直接にsshを使ってサービス側に接続するリリースとは違っています.理由はまだはっきりしていません.jecinsもSSH方式で、直接にssh登録サービスを使ってアプリケーションを発表する時と同じユーザー名を使うので、権限上の問題であるはずがありません.私の予想では、jenkinsはSSHリンクを通じて、いくつかのbash関連初期化を直接スキップしたかもしれません.バックフラッシュでデフォルトのダイナミックライブラリをロードするのは問題ないです.添付のディレクトリの下のダイナミックライブラリをロードする時にのみ、正確にダイナミックライブラリを読み込めなくなります.検証が必要ですが、直接にssh接続を使ってアプリケーションを発表します.追加ディレクトリのダイナミックライブラリを正常に読み込むことができます. 解決方法:特殊な位置に置いたダイナミックライブラリを上記のデフォルトディレクトリ、例えば/lib(64)/にコピーすればいいです. 問題の拡張:実際には問題の解決は簡単ですが、問題を発見する過程は改めて言及する必要があります.本人のアプリケーションはJavaアプリです.しかし、その中の一つの機能点はjecinsで失効しました.この機能点はjavaが外部プログラムOpenOffice Serverを起動することです.
問題が発見されていない時のソースコードの断片:
問題が発見されていない時のソースコードの断片:
pro = Runtime.getRuntime().exec(command.toString());
buffer = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while(buffer.readLine()!=null);
int rtstate = pro.waitFor();
return rtstate;
発見したrtstateは127で、霧がかかっています.最初はrtstate>=0が正しい状態だと思っていましたが、正確にはrtstateが0であるだけで、正常に起動して外部プログラムを実行しました.127はただのエラーコードですが、詳細なエラーメッセージはどうやって調べられますか?以下のソースのセグメントを見てください. pro = Runtime.getRuntime().exec(command.toString());
buffer = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while(buffer.readLine()!=null);
int rtstate = pro.waitFor();
if(rtstate!=0){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i=-1;
while((i=pro.getErrorStream().read())!=-1){
baos.write(i);
}
/** , Exception **/
System.out.println(baos.toString());
baos.close();
}
return rtstate;
この部分を加えて、エラー情報をキャプチャした後、明らかにエラーをコンソールに出力します.xx.soが見つかりません.この記事の冒頭に戻って、このエラーメッセージを初めて見たのは意外でした.