Linux 下 JAVA执行命令批处理方式

Posted Asura2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 下 JAVA执行命令批处理方式相关的知识,希望对你有一定的参考价值。

#r包路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到
#!/bin/bash
JAR_ALLNAME="/home/api/md/md-biz.jar"
JAR_NAME="md-biz.jar"
#JAR_NAME2="admin-service/admin-service.jar"

# 日志路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到
LOG_PATh=yurgqg.log
# 如果输入格式不对,给出提示!
tips() 
    echo ""
    echo "WARNING!!!......Tips, please use command: sh auto_deploy.sh [start|stop|restart|status].   For example: sh auto_deploy.sh start  "
    echo ""
    exit 1

# 启动方法
start() 
        # 重新获取一下pid,因为其它操作如stop会导致pid的状态更新
    pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk \'print $2\'`
        # -z 表示如果$pid为空时执行
    if [ -z $pid ]; then
        nohup java -jar $JAR_ALLNAME >> $LOG_PATh 2>&1
        echo "启动$JAR_NAME"
    fi


# 停止方法
stop() 
        # 重新获取一下pid,因为其它操作如start会导致pid的状态更新
    pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk \'print $2\'`
        # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
    if [ -z $pid ]; then
        echo ""
        echo "Service $JAR_NAME is not running! It\'s not necessary to stop it!"
        echo ""
    else
        kill -9 $pid
        echo ""
        echo "Service stop successfully!pid:$pid which has been killed forcibly!"
        echo ""
    fi

# 输出运行状态方法
status() 
        # 重新获取一下pid,因为其它操作如stop、restart、start等会导致pid的状态更新
    pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk \'print $2\'`
        # -z 表示如果$pid为空时执行。注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
    if [ -z $pid ];then
        echo ""
        echo "Service $JAR_NAME is not running!"
        echo ""
    else
        echo ""
        echo "Service $JAR_NAME is running. It\'s pid=$pid"
        echo ""
    fi

# 重启方法
restart() 
    echo ""
    echo ".............................Restarting.............................."
    echo "....................................................................."
        # 重新获取一下pid,因为其它操作如start会导致pid的状态更新
    pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk \'print $2\'`
        # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
    if [ ! -z $pid ]; then
        kill -9 $pid
    fi
    start
    echo "....................Restart successfully!..........................."

# 根据输入参数执行对应方法,不输入则执行tips提示方法
case "$1" in
   "start")
     start
     ;;
   "stop")
     stop
     ;;
   "status")
     status
     ;;
   "restart")
     restart
     ;;
   *)
     tips
     ;;
esac

 

linux系统下java执行带rar命令解压带有空格的文件

最近在linux系统下解析rar文档,应为java没有解析rar的库,所以只能用rar的命令来解析。
在用rar命令时,遇到了问题:如果rar文件名中带有空格,那么就没法用命令了,命令失去了意义。
我想过可能是要加引号吧,或是加其他什么分隔号的,我试了很多中分隔的方法,但是都没有实现。
我试了下,在linux系统下,用java程序,只要加了引号,程序就根本解析不了rar。(命令后得到的流对象为空)
当时我在linux的后台命令下执行加引号,却能够执行。
我又到windows下去,windows下加引号是可以解决的。在程序里也能解决。
我那程序是用java的Runtime、和Process两个类
具体做法是
String commd = "unrar 的命令";
Runtime rt = Runtime.getRuntime() ;
Process p = rt.exec(commd);

InputStream inputStream = p.getInputStream();

如果在执行命令时,rar文件中文件名有空格,则没有办法生成有效的进程。p得不到流。

大家有没有遇到这样的问题呢?
帮着解决下哦
今天去试了下,在终端能够用使用转意字符\ 和引号,但是在程序里面还是得不到流啊。也就是命令没起作用

linux下的文件名引用的时候空格要加转义 比如

test file.rar 实际引用的时候就是 test\ file.rar

至于怎么解决 我就不再多说了哈
参考技术A 将命令封装为脚本文件,通过调用脚本文件去执行命令 参考技术B 1:使用单引号而非双引号
2:使用转意字符\

以上是关于Linux 下 JAVA执行命令批处理方式的主要内容,如果未能解决你的问题,请参考以下文章

linux中批处理文件顺序执行命令的输入

linux下 利用C或C++ 语言调用需要root权限的命令时候,怎么处理。

linux系统下java执行带rar命令解压带有空格的文件

JAVA中如何执行DOS命令

使用批处理命令设置环境变量

linux为啥总是找不到java命令