2016-05-05 13 views
3

こんにちは私はjar/javaプログラムがラズベリーパイで実行されているかどうかを検出する理想的な方法を知りたいと思います。java(jar)からラズベリーpiを検出する理想的な方法

なぜ私はそれを望んでいますか?私はラズベリーパイのウォッチドッグを使用したいですが、私はウォッチドッグを必要としない、または必要としないウィンドウからJavaプログラムを使用します。

いくつかの人が手術システムを検出するのと同じ方法で、ジャーがラズベリーで動作しているかどうかを検出する方法はありますか?

の人がいることを使用するのと同じ方法で...

class ShowProperties { 
    public static void main(String[] args) { 
     System.getProperties().list(System.out); 
    } 
} 
+0

'システム。getenv( "PROCESSOR_IDENTIFIER") 'はプロセッサ名を取得します。それはPiで何を返すのですか? –

答えて

1

はあなたのJVMは、これらのJavaシステムプロパティの値をテストすることによって実行されているオペレーティングシステムの詳細を考え出すことができる必要があります:

  • os.nameオペレーティングシステム名
  • os.archオペレーティングシステムのアーキテクチャー
  • os.version Operatinシステムバージョン

システムプロパティの値を取得するには、System.getProperty(name)を使用します。


それは十分に正確ではない場合、あなたは、このようなuname -1または類似の実行にSystem.exec(...)を使用して、非ポータブルソリューション、に頼る必要があります。

注:システム上に表示される「raspberrypi」は、実際にはデフォルトのホスト名であり、信頼できる指標ではありません。 (多くの場合、ユーザーは別のものに設定します)。

+0

それはあまり役に立たないと思います。これは、次の情報を提供します: - 'Linuxの 4.1.19+ をコマンドラインで 代わりには、una​​me -aは、以下の情報を提供しますarm': - 'のLinux raspberrypi 4.1.19+#858火3月15日15時52分: 03 GMT 2016 armv6l GNU/Linux'をダウンロードしてください。今私はいくつかのsysfsやprocfsから情報を読み取る方法があるのだろうかと思っていました。 – Siddharth

0

Stephen Cのように、os。*プロパティを使用できます。

あなたのJavaアプリケーションの中からuname -aを実行することができますが、形式が大きく変わるため、これはおそらく悪い考えです。 OMC(メディアプレーヤーのディストリビューション)を実行している私のRPI2は、私はあなたのコードを取得する:

os.arch=arm 
os.name=Linux 
os.version=4.4.6-3-osmc 

とのuname -aレポート:

Linux osmc 4.4.6-3-osmC#1 SMP PREEMPT Fri Apr 1 20:55:03 UTC 2016 armv7l GNU/Linux 

また、あなたがPI4Jプロジェクトを見て与えることができます。実行中のPIに関する情報を出力するexampleがあります。彼らがどのようにそれを行うのかに関するコードを見てみてください。

0

私のヘルパークラスのコードの一部です。通知方法はです.PiUnixはtrueに設定されています。このテクニックは、os-releaseファイルのPRETTY_NAMEまたはNAMEの値に依存します。サポートされているシステムのバリエーションを検出するのに必要な調整。 isLinuxおよびisPiLinuxは、期待されるPiで実行しているときにtrueを返します。 isPiLinuxのテストが必要です。

private static boolean isWindows  = false; 
private static boolean isLinux   = false; 
private static boolean isHpUnix  = false; 
private static boolean isPiUnix  = false; 
private static boolean isSolaris  = false; 
private static boolean isSunOS   = false; 
private static boolean archDataModel32 = false; 
private static boolean archDataModel64 = false; 

static { 
    final String os = System.getProperty("os.name").toLowerCase(); 
    if (os.indexOf("windows") >= 0) { 
     isWindows = true; 
    } 
    if (os.indexOf("linux") >= 0) { 
     isLinux = true; 
    } 
    if (os.indexOf("hp-ux") >= 0) { 
     isHpUnix = true; 
    } 
    if (os.indexOf("hpux") >= 0) { 
     isHpUnix = true; 
    } 
    if (os.indexOf("solaris") >= 0) { 
     isSolaris = true; 
    } 
    if (os.indexOf("sunos") >= 0) { 
     isSunOS = true; 
    } 
    if (System.getProperty("sun.arch.data.model").equals("32")) { 
     archDataModel32 = true; 
    } 
    if (System.getProperty("sun.arch.data.model").equals("64")) { 
     archDataModel64 = true; 
    } 
    if (isLinux) { 
     final File file = new File("/etc", "os-release"); 
     try (FileInputStream fis = new FileInputStream(file); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis))) { 
      String string; 
      while ((string = br.readLine()) != null) { 
       if (string.toLowerCase().contains("raspbian")) { 
        if (string.toLowerCase().contains("name")) { 
         isPiUnix = true; 
         break; 
        } 
       } 
      } 
     } catch (final Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
関連する問題