Java程式呼叫linux指令碼-簡單版
阿新 • • 發佈:2021-02-15
最近快要過年了,在研究Java程式直接呼叫linux指令碼,保障系統故障時自動重啟,雖然簡單,但還是要記錄一下,以免踩坑。
1、編寫shell指令碼
在伺服器指定目錄編寫好本次要執行的shell指令碼,如下圖。
2、編寫Java程式
本次編寫的Java程式是基於ProcessBuilder呼叫shell指令碼,可謂是非常簡單明瞭了~
示例程式碼如下:
/** * java程式呼叫shell指令碼 */ public void autoRunShell(){ try{ log.info("autoRunShell start......"); //要執行的shell指令碼命令檔案 String command = "./test.sh"; //要執行的命令所在目錄path String path = "/data/service-control/backup"; //1.執行命令,要先切換目錄 ProcessBuilder processBuilder = new ProcessBuilder(); //切換目標目錄 processBuilder.directory(new File(path)); //新增要執行的命令 processBuilder.command(command); Process ps = processBuilder.start(); int execStatus = ps.waitFor(); //阻塞,直到上述命令執行完,返回為0則表示執行成功 log.info("autoRunShell execStatus:"+execStatus+",返回為0表示執行成功"); log.info("autoRunShell stop......"); }catch (Exception e){ log.error("autoRunShell:error:"+e.getMessage(),e); } }
3、執行Java程式
上面編寫好了shell指令碼以及Java程式後,只需要執行Java程式,就可以達到目的了,是不是很簡單。
程式執行後的目錄截圖
PS:呼叫指令碼時如果有許可權問題的話,可通過下面的程式碼進行賦權。
賦權的程式碼:
/** * java程式呼叫shell指令碼,並且附帶許可權控制 */ public void autoRunShellWithChmod(){ try{ log.info("autoRunShellWithChmod start......"); //要執行的命令 String command = "./test.sh"; //要執行的命令所在目錄path String path = "/data/service-control/backup"; //0.賦權:如果許可權不夠的話,需要先賦權 ProcessBuilder processBuilder0 = new ProcessBuilder("/bin/chmod","755",command); processBuilder0.directory(new File(path)); Process ps0 = processBuilder0.start(); int chmodStatus = ps0.waitFor(); //阻塞,直到上述命令執行完 log.info("autoRunShellWithChmod chmodStatus:"+chmodStatus+",返回為0表示賦權成功"); //1.執行命令,要先切換目錄 ProcessBuilder processBuilder = new ProcessBuilder(); //先切換目標目錄 processBuilder.directory(new File(path)); processBuilder.command(command); Process ps = processBuilder.start(); int execStatus = ps.waitFor(); //阻塞,直到上述命令執行完,返回為0則表示執行成功 log.info("autoRunShellWithChmod execStatus:"+execStatus+",返回為0表示執行成功"); log.info("autoRunShellWithChmod stop......"); }catch (Exception e){ log.error("autoRunShellWithChmod:error:"+e.getMessage(),e); } }
編碼不易,不喜勿噴~