亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java - 嘗試執行 shell 腳本時權限被拒絕

Java - 嘗試執行 shell 腳本時權限被拒絕

慕的地6264312 2021-08-25 16:25:33
我正在創建一個 Java 程序,該程序將執行 JAR 文件以在我的機器上本地部署數據庫。為此,我需要從 shell 腳本執行 JAR 文件(這需要自動化,而不是手動部署)?!癹ava -jar some-jar-SNAPSHOT.jar”問題是,每當我嘗試訪問任何類型的 shell 腳本時,我都會收到錯誤 = 13,權限被拒絕。我已經使用 sudo chmod 777 使我的目錄為所有用戶以及 JAR 文件本身讀取、寫入、執行。即使我嘗試更改目錄時也會出現問題。這是我用來執行命令的代碼片段:String[] jarCommand = {"java -jar some-jar-SNAPSHOT.jar"};        Process process = Runtime.getRuntime().exec(jarCommand);        System.out.println("Jar File accessed");編輯:當我嘗試執行一個簡單的命令時會出現此權限問題,例如:String[] cd = {jarDirectory.getAbsolutePath(), "cd"}; Runtime.getRuntime().exec(cd);這是在通過 chmod 設置文件的權限之后。我查看了大量不同的類似問題,但沒有一個解決方案解決了我的問題。任何幫助是極大的贊賞。
查看完整描述

2 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

這與 JAR 文件的執行權限無關。實際上,JAR 文件只需要可讀即可。

如果您的問題的標題是準確的,這與 Java 程序是否能夠讀取和執行您正在談論的shell 腳本有關:

  • shell 腳本本身必須可由試圖運行它們的有效用戶執行。例如,腳本本身需要設置相關的執行位。

  • shell 腳本的路徑需要從根目錄一直讀取(由有效用戶......)。(或當前目錄,如果您使用的是相對于點的相對路徑名?;蛘吣夸?$PATH ... 如果您使用的是簡單的命令名稱。)


奇怪的是,這段代碼根本不是試圖運行 shell 腳本。那是一個簡單的java命令。不涉及 shell 腳本。

如果失敗并出現“權限被拒絕”錯誤,則該java命令不可執行,或者 JAR 文件不可讀。

我認為您需要向我們提供更多信息;例如所有相關的輸出、真實的代碼和真實的文件/目錄名稱和權限。


我的程序首先嘗試導航(通過 CD)到包含 JAR 文件本身的目錄:

我假設您意識到您的嘗試:

    String[] cd = {jarDirectory.getAbsolutePath(), "cd"};
    Runtime.getRuntime().exec(cd);

不起作用。它更改子進程的當前目錄,但這對父進程或您運行的下一個子進程沒有影響。您應該使用ProcessBuilderdirectory(File),特別是它可用于為子進程選擇不同的當前目錄。

這意味著您可能位于錯誤的目錄中,這可能會導致“權限被拒絕”問題。


查看完整回答
反對 回復 2021-08-25
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

我不知道為什么這會導致權限被拒絕,但這應該是

String[] jarCommand = {"java", "-jar", "some-jar-SNAPSHOT.jar"};

否則,exec 調用將查找名為“java -jar some-jar-SNAPSHOT.jar”的可執行文件,盡管我希望這會導致 ENOENT 而不是 EPERM。


查看完整回答
反對 回復 2021-08-25
  • 2 回答
  • 0 關注
  • 632 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號