簡體   English   中英

從Java運行Linux服務

[英]Running a linux service from Java

我正在嘗試從Java啟動和停止linux服務。 我正在按照當前公認的慣例使用ProcessBuilder。 我構造了以下代碼(webService是一個包含正在啟動的服務的名稱的參數):

String[] commands = new String[6]; 

commands[0] = "/bin/sh";
commands[1] = "-c";
commands[2] = "sudo";
commands[3] = "service";
commands[4] = webService;
commands[5] = "start";

ProcessBuilder processBuilder = new ProcessBuilder(commands);

Process process = processBuilder.start();

int outcomeOfProcess = process.waitFor();

這實際上是在調用命令/bin/sh -c sudo service webService start 從服務器的linux終端運行時哪個運行正常,但是不能從Java ProcessBuilder中運行(運行時,outcomeOfProcess為1)。

我也嘗試了sudo systemctl start webservice.service ,但無濟於事-我也試圖調用已經位於linux機器上的bash腳本,但這也不起作用。

有人對如何解決這個問題有任何想法嗎?

不確定ProcessBuilder可以處理SO請求。 對於需要執行主機OS命令(Windows / OSX / Linux等)的情況,我使用Runtime.exec(String)

String command = "/bin/sh -c sudo service " + webService  + " start";
Runtime.getRuntime().exec(command);

如果還希望獲得輸出和錯誤退出,則可以按照此答案中的說明使用ProcessBufferedReader

public static void main(String args[]) {
    String s;
    Process p;

    String command = "/bin/sh -c sudo service " + webService  + " start";

    try {
        // run the command
        p = Runtime.getRuntime().exec(command);
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        // get the result
        while ((s = br.readLine()) != null)
            System.out.println("line: " + s);
        p.waitFor();
        // get the exit code
        System.out.println ("exit: " + p.exitValue());
        p.destroy();
    } catch (Exception e) {}
}

注意:不是Linux專家,所以我不能100%告訴您命令行是正確的,但是可以,您可以通過這種方式執行它。

問題是sudoers文件阻止了代碼的執行,而tty並沒有對該文件進行一點改動就意味着它會接受代碼。 整夜都需要調試的噩夢! 感謝所有的投入!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM