我正在編寫一個簡單的函數來測試Cassandra是否在本地機器上運行(通過捕獲service cassandra status
的輸出。問題是此命令總是退出,返回狀態爲3,返回狀態很差。我已經成功地在前面調用了service cassandra stop
到這個命令,甚至嘗試在一個循環中運行status
來查看是否存在一些競爭條件(它似乎可靠地在狀態3下很長時間失敗)。但是,通過shell運行service cassandra status
。任何想法是什麼問題可以是,甚至只是如何調試這個如何從命令行調試scala的sys.process命令失敗時使用錯誤的退出代碼(3)?
private def isCassandraStopped(): Boolean = {
val s = Seq("sudo", "sh", "-c", "service cassandra status").!!
val r = " * Cassandra is not running" == s
if (!r) logger.info(s"Cassandra is not stopped: #$s#")
r
}
這是之前執行上述方法成功行:
Seq("sudo", "sh", "-c", "service cassandra stop").!
你可以發佈init.d腳本嗎?是手工製作還是附帶一個包裝在你的系統上?此外,還可以從shell中運行:'service cassandra status> /tmp/my.log'和'echo $?',然後查看是否有任何輸出進入屏幕,什麼是退出狀態。 –
文件中有很多內容,但據我所知,我們沒有從標準cassandra包中更改任何內容。我運行'echo $?',它看起來像cassandra沒有運行時通常返回狀態3,所以我可以檢查返回狀態代碼,不做任何字符串比較。 – jonderry