![](/img/trans.png)
[英]Running a shell command in IBM cloud through java programme throwing error as java.io.IOException: Cannot run program =13, Permission denied
[英]JavaFX java.io.IOException "uptime": error=13, permission denied - Running program as regular user
我正在編寫一個工作程序,代碼的某些部分使用Process
和ProcessBuilder
來運行一些系統命令。
我正在 Linux Mint 機器上開發它,但該程序將在 Ubuntu 20.04 GNOME 中運行。
當我將 maven 項目構建為 javafx:jlink 時(因為我將其構建為 .deb 包)並運行創建的bin/app
腳本。 我在控制台中收到此錯誤。
java.io.IOException: Cannot run program "uptime": error=13, Permission denied
我已經搜索了其他線程,他們都說了同樣的話,我必須使用chmod u+x /usr/bin/uptime
授予運行程序權限的用戶對該可執行文件的權限。 它不起作用。
最初這部分代碼使用Process
,切換到ProcessBuilder
並且仍然沒有做任何事情。 我什至使/usr/bin/uptime
的用戶所有者成為了用戶所有者,但我仍然收到該錯誤。
這是我目前正在使用的:
// Set Uptime
try{
Process p = new ProcessBuilder().command("uptime","-p").start();
InputStream in = p.getInputStream();
uptime = new String(in.readAllBytes());
p.destroy();
}catch (IOException err){
System.out.println(err.getMessage());
err.printStackTrace();
}
我能想到的唯一區別是,在我的 Linux Mint 機器中,我的用戶是管理員,而作為測試機器,用戶是普通用戶。
我禁用 AppArmor 認為它會導致問題,檢查journalctl -xe
以查看是否出現任何奇怪的情況,甚至檢查/var/log/syslog
但也沒有錯誤。
如果我以該用戶身份打開常規終端,我可以完美地運行這些命令。 很難確定這給我帶來了麻煩。 有什么想法嗎?
如此處所示,指定redirectErrorStream(true)
以查看有關錯誤的更多信息。 例如,在我的平台上,
Process p = new ProcessBuilder().command("uptime", "-p")
.redirectErrorStream(true).start();
InputStream in = p.getInputStream();
System.out.println(new String(in.readAllBytes()));
告訴我這個:
uptime: illegal option -- p
usage: uptime
刪除不受支持的選項會產生預期的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.