Java 可以通過 Runtime 調(diào)用Linux命令,形式如下:
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了荔灣免費(fèi)建站歡迎大家使用!
Runtime.getRuntime().exec(command)
但是這樣執(zhí)行時(shí)沒有任何輸出,因?yàn)檎{(diào)用 Runtime.exec 方法將產(chǎn)生一個(gè)本地的進(jìn)程,并返回一個(gè)Process子類的實(shí)例(注意:Runtime.getRuntime().exec(command)返回的是一個(gè)Process類的實(shí)例)該實(shí)例可用于控制進(jìn)程或取得進(jìn)程的相關(guān)信息。
由于調(diào)用 Runtime.exec 方法所創(chuàng)建的子進(jìn)程沒有自己的終端或控制臺,因此該子進(jìn)程的標(biāo)準(zhǔn)IO(如stdin,stdou,stderr)都通過 Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream() 方法重定向給它的父進(jìn)程了。
用戶需要用這些stream來向子進(jìn)程輸入數(shù)據(jù)或獲取子進(jìn)程的輸出,下面的代碼可以取到 linux 命令的執(zhí)行結(jié)果:
try {
String[] cmd = new String[]{”/bin/sh”, “-c”, ” ls “};
Process ps = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(”\n”);
}
String result = sb.toString();
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
一、創(chuàng)建linux維護(hù)用戶
登錄root用戶
創(chuàng)建新用戶
useradd 新用戶名
設(shè)置用戶密碼
passwd 新用戶密碼
二、安裝jdk和配置環(huán)境變量
建議在root用戶下直接安裝jdk,并直接配置環(huán)境變量,同時(shí)給非root用戶設(shè)置讀和執(zhí)行權(quán)限
解壓包
tar xvf jdk包名.tar
配置全局變量
編輯/etc/profile文件
vi /etc/profile
按I鍵,切換成編輯模式。
在文件未加入一下配置
export JAVA_HOME=jdk的解壓文件目錄
export JRE_HOME=jdk的解壓文件目錄/jre
export?CLASSPATH=.:${JAVA_HOME}/lib:${?JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${?JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
保存并退出
Esc ??
:wq
重載配置文件使其生效
source /etc/profile
檢查是否安裝成功
Javac
Java version
權(quán)限修改
讀4寫2執(zhí)行1,順序所有者、組成員、其他用戶
Chomd ?755 ?jdk的解壓文件目錄
三、安裝tomcat
安裝tomcat和放入war包使用非root的維護(hù)用戶
如果使用root安裝的話記得設(shè)置權(quán)限。( chomd -r 外層文件目錄 )
su - 用戶名
1、解壓包
tar ?xvf ?tomcat包名.tar
2、將war包放入tomcat/webapps目錄下
3、Tomcat啟動(dòng)服務(wù)和停止服務(wù)
查看進(jìn)程
ps -ef | grep java
啟動(dòng)應(yīng)用
Tomcat bin目錄下.startup.sh
停止應(yīng)用
建議使用
Kill -9 進(jìn)程號
注:解壓出應(yīng)用文件后,注意配置信息的修改
四、IBM MQ部署 (7.5之后的版本)
(以下是使用9.0版本的正確部署命令)
一、 卸載舊版本IBM MQ (可選)
因?yàn)椴渴瓠h(huán)境沒有安裝過mq,卸載這部分命令我沒有親自測試過
設(shè)置環(huán)境
以用戶身份登錄到組mqm,找到mq的安裝位置 /opt/mqm
source ./setmqenv -s
查看隊(duì)列管理器的狀態(tài)
dspmq -o installation
停止與要卸載的安裝關(guān)聯(lián)的所有正在運(yùn)行的隊(duì)列管理器
endmqm SXRECV
停止與隊(duì)列管理器關(guān)聯(lián)的所有偵聽器。
endmqlsr -m SXRECV
查看系統(tǒng)上當(dāng)前安裝的軟件包(組件)
sudo rpm -qa | grep MQSeries
列出軟件包并一次性卸載
sudo rpm -qa | grep MQSeries | xargs rpm -ev
再將對應(yīng)的用戶及安裝目錄給刪除
rm -rf /opt/mqm
userdel -r mqm
檢查MQ license
license文件在安裝目錄中 /opt/mqm/lib 可以找到
amqtcert.lic - is a trial license
amqbcert.lic - is a beta license
amqpcert.lic - is the production license
——————————————————————————————————————
二、安裝新版本ibm mq
解壓,解壓文件都在MQServer中
tar –xzvf IBM_MQ_9.1.5_LINUX_X86-64.tar.gz
進(jìn)入MQServer文件夾中:
cd MQServer/
運(yùn)行MQ許可證程序
./mqlicense.sh
安裝WebSphere MQ for Linux服務(wù)器(Runtime、SDK 和 Server 軟件包):
rpm -U MQSeriesRuntime-9.1.5-0.x86_64.rpm
rpm -U MQSeriesSDK-9.1.5-0.x86_64.rpm
rpm -U MQSeriesServer-9.1.5-0.x86_64.rpm
安裝WebSphere MQ for Linux客戶機(jī):
rpm -U MQSeriesClient-9.0.0-0.x86_64.rpm
安裝WebSphere MQ樣本程序:
rpm -U MQSeriesSamples-9.0.0-0.x86_64.rpm
創(chuàng)建組和用戶
安裝過程創(chuàng)建了一個(gè)名為mqm的用戶和一個(gè)同樣名為 mqm 的組。設(shè)置一個(gè)密碼來解鎖。
passwd mqm
——————————————————————————————————————
三、 配置
(這部分隊(duì)列管理器、通道、隊(duì)列等根據(jù)實(shí)際情況自行配置)
切換用戶:
su mqm
創(chuàng)建隊(duì)列管理器
使用crtmqm命令來創(chuàng)建一個(gè)名為 SXRECV
的隊(duì)列管理器。我們把它作為缺省隊(duì)列,并且將不在創(chuàng)建時(shí)指定死信隊(duì)列。然后使用strmqm命令啟動(dòng)隊(duì)列管理器。
crtmqm -q ?SXRECV
strmqm ?SXRECV
——————
如果執(zhí)行crtmqm命令時(shí)提示
-bash-3.2$ crtmqm
-bash: crtmqm: command not found
find / -name crtmqm
則需要配置mqm用戶的環(huán)境變量,編輯如下文件,并添加下面的內(nèi)容,如下:
第一種方法:相對第二種較安全僅對mqm用戶有效
方法一:
(1) -bash-3.2$ vi /var/mqm/.bash_profile --有可能會(huì)在文件夾下看不到這個(gè)文件,通過編輯即可看到
PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
(2)執(zhí)行“.”命令,使這個(gè)文件生效
-bash-3.2$ source ?.bash_profile
(3)再次嘗試實(shí)行crtmqm或是dspmqm命令,即可發(fā)現(xiàn)已經(jīng)生效。
方法二:
( 1)
su ?root
[if !supportLists](2)[endif]
vim /etc/profile
[if !supportLists](3)[endif] 在最后面加上:
PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/bin
( 4)關(guān)閉遠(yuǎn)程終端重新打開,無需重啟服務(wù)器
——————
運(yùn)行隊(duì)列管理器
runmqsc SXRECV
創(chuàng)建通道和隊(duì)列
DEFINE QLOCAL (XYDATA) REPLACE USAGE (NORMAL) DEFPSIST (YES) MAXDEPTH (300000) DESCR('興業(yè)銀行')
DEFINE QLOCAL (XYTRANS) REPLACE USAGE (XMITQ) DEFPSIST (YES) MAXDEPTH (300000) DESCR('興業(yè)銀行')
DEFINE QREMOTE (XYACK) REPLACE DEFPSIST (YES) RQMNAME (SXSEND) ?RNAME (XYACK) XMITQ (XYTRANS) DESCR('XXXX')
DEFINE CHANNEL (XYDATA) CHLTYPE (RCVR) TRPTYPE (TCP) REPLACE DESCR('XXXX')
DEFINE CHANNEL (XYACK) CHLTYPE (SDR) CONNAME ('166.1.1.8(2214)') XMITQ (XYTRANS) TRPTYPE (TCP) DISCINT (0) CONVERT (NO) SHORTRTY (30) SHORTTMR (10) LONGRTY (999999999) LONGTMR (20) REPLACE DESCR('XXXX')
DEFINE CHANNEL (SVRCONN) CHLTYPE (SVRCONN) MCAUSER('mqm')
創(chuàng)建監(jiān)聽
DEFINE LISTENER (RECLISTENER) TRPTYPE (TCP) CONTROL(QMGR) PORT (2214)
啟動(dòng)監(jiān)聽
start LISTENER(RECLISTENER)
啟動(dòng)通道
start channel(SVRCONN)
start channel(XYDATA)
start channel(XYACK)
———————————————————————————————————————————————————
四、2035錯(cuò)誤碼 說明
如果程序連接mq報(bào)錯(cuò)2035,則需要對權(quán)限認(rèn)證做設(shè)置,則進(jìn)行以此操作
1、
ALTER QMGR CHLAUTH(DISABLED)
2、
ALTER CHL(通道名) CHLTYPE(SVRCONN) MCAUSER('mqm')
3、
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
或者直接將連接認(rèn)證選項(xiàng)置為空,將其完全關(guān)閉,指令如下:
ALTER QMGR CONNAUTH('')
在執(zhí)行完上述兩條命令中的任一條后,都需要刷新連接認(rèn)證的緩存,指令如下:
REFRESH SECURITY TYPE(CONNAUTH)
五、mq操作命令
一、MQ的啟動(dòng)與停止
1、MQ的啟動(dòng)
strmqm QMgrName
如果啟動(dòng)默認(rèn)隊(duì)列管理器,strmqm后可以忽略隊(duì)列管理器名稱。
2、MQ的關(guān)閉
endmqm?-i?QMgrName
停止mq
二、MQ運(yùn)行狀態(tài)查看與常用操作
1、 查看隊(duì)列管理器運(yùn)行狀態(tài)
su mqm
執(zhí)行如下命令檢查隊(duì)列管理器運(yùn)行狀態(tài):dspmq顯示結(jié)果中QMNAME表示MQ隊(duì)列管理器的名稱,STATUS表示當(dāng)前運(yùn)行狀態(tài)。運(yùn)行狀態(tài)有如下幾種:Starting正在啟動(dòng)Running正在運(yùn)行Ending正在停止Ended normally已經(jīng)正常終止Ended immediately已經(jīng)立即終止Ended preemtively已經(jīng)強(qiáng)制終止Ended unexpectively異常終止
注意:停止MQ后必須使用dspmq命令進(jìn)行狀態(tài)檢查
2、查看通道運(yùn)行狀態(tài)與啟停通道
runmqsc
dis chl(*);查看所有通道定義
dis chs(*);查看所有通道狀態(tài),如果沒有查詢到通道狀態(tài),或報(bào)錯(cuò)AMQ8420: Channel Status not found,請啟動(dòng)通道
dis chs(ChannelName); 查看通道ChannelName的狀態(tài)
通道狀態(tài)有如下幾種:
STARTING正在啟動(dòng)BINDING正在綁定INITIALIZING正在初始化RUNNING正常STOPPING?正在停止RETRYING重試PAUSED等待STOPPED已停止REQUESTING請求
start?chl(ChannelName);啟動(dòng)通道
stop?chl(ChannelName);停止通道
* 重置通道
reset channel(ChannelName);?重置通道序號。當(dāng)本地與其他MQ隊(duì)列管理器的通道無法正常啟動(dòng)的情況,檢查日志發(fā)現(xiàn)是通道序號不一致,此時(shí)就需要先停止發(fā)送方通道,清空隊(duì)列深度并在發(fā)送方和接收方進(jìn)行通道計(jì)數(shù)的重置,重置后啟動(dòng)通道即可恢復(fù)通訊。
注意:重置成功mq序列號一般相同或相差1
3、查看通道監(jiān)聽狀態(tài)與啟停監(jiān)聽
runmqsc
dis listner(*);查看通道監(jiān)聽定義
dis lsstatu(listnerName);查看監(jiān)聽狀態(tài)
start?lstr(listnerName); 啟動(dòng)監(jiān)聽
stop?lstr(listnerName); 停止監(jiān)聽?
4、查看隊(duì)列深度
runmqsc
dis q(*);查看所有各類隊(duì)列的屬性
dis?qlocal(QName);查看所有本地隊(duì)列的屬性
隊(duì)列深度屬性為:CURDEPTH
查看隊(duì)列深度display ql('隊(duì)列名') ?curdepth
*清空隊(duì)列深度
清空隊(duì)列深度
clear ql(‘隊(duì)列名’)
三、MQ發(fā)送和接收消息
su mqm
發(fā)送消息
amqsput ?隊(duì)列名 ?隊(duì)列管理器
獲取消息
amqsget ?隊(duì)列名 ?隊(duì)列管理器
可通過配合查看隊(duì)列深度命令,完成mq的聯(lián)調(diào)
六、其他維護(hù)中常用linux命令
1、測試端口連接
telnet ip port
2、查看已啟動(dòng)的端口
netstat -an | grep 端口號
3、查看應(yīng)用進(jìn)程
ps -ef |grep java
4、修改權(quán)限
chomd ?XXX(對應(yīng)的權(quán)限) ?文件目錄
5、修改文件或目錄下所有文件所有者和組
Chomd -R 用戶名:組名 ?文件目錄
6、查看目錄內(nèi)容
ls 或者ls -l (簡寫ll)
7、查看文件輸出
cat 目錄/文件名
或者
Vi 目錄/文件名 按i可進(jìn)入編輯
按 G 到文檔末尾
按 gg 到文件首行
不保存退出
Esc ??:q!
保存退出
Esc ??:wq
vi 進(jìn)入文檔文檔后查找關(guān)鍵字
Esc 進(jìn)入命令行
/關(guān)鍵字
按n向下繼續(xù)查找
按N向上繼續(xù)查找
8、殺進(jìn)程
Kill -9 進(jìn)程號
9、復(fù)制
cp -r 源目錄 ?目標(biāo)目錄
10、移動(dòng)
mv ?-i 源文件或目錄 目標(biāo)文件或目錄
11、刪除
rm -R 文件目錄
12、 切換工作目錄
cd ?相對路徑或絕對路徑
~也表示為 home 目錄 的意思, . 則是表示目前所在的目錄, .. 則表示目前目錄位置的上一層目錄。
執(zhí)行l(wèi)inux命令基,基本思路是從控制臺獲得輸入的指令,啟動(dòng)命令行執(zhí)行命令,捕捉異常,示例如下:
public?class?TestRunTime?{
public?static?void?main(String[]?args)?throws?IOException,?InterruptedException?{
String?cmd?=?"";
if(args?==?null?||?args.length?==?0){
System.out.println("請輸入命令行參數(shù)");
}else{
for(int?i=0;iargs.length;?i++){//獲得輸入的命令
cmd?+=?args[i]?+?"?";
}
}
try?{
Process?process?=?Runtime.getRuntime().exec(cmd);//執(zhí)行命令
InputStreamReader?ir?=?new?InputStreamReader(process.getInputStream());
LineNumberReader?input?=?new?LineNumberReader(ir);
String?line;
while?((line?=?input.readLine())?!=?null)?{//輸出結(jié)果
System.out.println(line);
}
}?catch?(java.io.IOException?e)?{
System.err.println("IOException?"?+?e.getMessage());//捕捉異常
}
}
}
1、java程序一般都有啟動(dòng)腳本
2、例如tomcat/bin
./startup.sh
3、例如weblogic
./startWebLogic.sh
4、也可以用java直接啟動(dòng)jar包,例如
/doyoo/jdk1.6/bin/java -DRmode=test -Dlog4j.configuration=file:conf/log4j.properties -classpath run.jar net.test.ji
m.server.boot.Booter
首先確保Linux開啟sshd服務(wù),并支持遠(yuǎn)程SSH連接。java程序使用jsch框架登錄Linux,執(zhí)行命令。
protected void creation() throws Exception {
JSch jsch = new JSch();
session = jsch.getSession(userName, host, port);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setTimeout(CONNECT_TIMEOUT);
session.setConfig("PreferredAuthentications", "password,keyboard-interactive");
session.setServerAliveInterval(1000 * 60 * 2);
session.connect();
}
public String sendCommand(String command) throws Exception {
if(!isConnected())
throw new JSchException("Session is not connected, command exec faild.");
final ChannelExec exec = (ChannelExec)session.openChannel("exec");
ByteArrayOutputStream out = new ByteArrayOutputStream();
exec.setCommand(command);
exec.setOutputStream(out);
exec.setExtOutputStream(out);
exec.connect();
final Thread thread = new Thread() {
public void run() {
while(!exec.isEOF()) {
try { Thread.sleep(500L); } catch(Exception e) {}
}
}
};
thread.setDaemon(true);
thread.start();
thread.join(EXEC_TIMEOUT);
thread.interrupt();
if(thread.isAlive()) {
throw new JSchException("Exec Time Out Error");
} else {
try {
exec.disconnect();
out.close();
} catch (Exception e) {
}
byte[] lens = out.toByteArray();
String result = new String(lens, charset);
if(result.startsWith("bash") result.indexOf("command not found") != -1)
return "";
return result;
}
}
分享文章:linuxjava命令,java 執(zhí)行l(wèi)inux命令行
路徑分享:http://chinadenli.net/article34/heshpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站收錄、云服務(wù)器、網(wǎng)站改版、微信小程序、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)