Linux运行Java脚本

运行中的Java程序

[root@localhost /]# ps -ef | grep java
root      6207 16807  0 11:30 pts/0    00:00:00 grep --color=auto java
root     11861     1  0 7月17 ?       00:02:11 java -jar jeeplus-vue.jar
[root@localhost /]# ps -aux | grep java
root      6658  0.0  0.0 116956  1020 pts/0    S+   11:30   0:00 grep --color=auto java
root     11861  0.1 13.6 5718012 1086144 ?     Sl   7月17   2:11 java -jar jeeplus-vue.jar

# PID(进程号)为11861

1、ps -ef用于查看全格式的全部进程,ps -aux也是用于查看进程。其中“ps”是在Linux中是查看进程的命令,“-e ”参数代表显示所有进程,“-f”参数代表全格式。

2、ps -ef和ps aux,这两者的输出结果差别不大,但展示风格不同。aux是BSD风格,显示的项目有:USER , PID , %CPU , %MEM , VSZ , RSS , TTY , STAT , START , TIME , COMMAND。而-ef是System V风格,显示的项目有:UID , PID , PPID , C , STIME , TTY , TIME , CMD。

3、COMMADN列如果过长,aux会截断显示,而ef不会。

综上,如果想查看进程的CPU占用率和内存占用率,可以使用aux ,如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef。

找到Java程序的地址

[root@localhost /]# which java
/usr/local/java/jdk1.8.0_333/bin/java
[root@localhost /]# ll /proc/11861 #11861为进程号
总用量 0
dr-xr-xr-x  2 root root 0 7月  17 17:04 attr
-rw-r--r--  1 root root 0 7月  17 17:04 autogroup
-r--------  1 root root 0 7月  17 17:04 auxv
-r--r--r--  1 root root 0 7月  17 16:43 cgroup
--w-------  1 root root 0 7月  17 17:04 clear_refs
-r--r--r--  1 root root 0 7月  17 16:43 cmdline
-rw-r--r--  1 root root 0 7月  17 17:04 comm
-rw-r--r--  1 root root 0 7月  17 17:04 coredump_filter
-r--r--r--  1 root root 0 7月  17 17:04 cpuset
lrwxrwxrwx  1 root root 0 7月  17 17:04 cwd -> /var/apps/maintenanceSystem
-r--------  1 root root 0 7月  17 16:43 environ
lrwxrwxrwx  1 root root 0 7月  17 16:43 exe -> /usr/local/java/jdk1.8.0_333/bin/java
dr-x------  2 root root 0 7月  17 16:43 fd
dr-x------  2 root root 0 7月  17 17:04 fdinfo
-rw-r--r--  1 root root 0 7月  17 17:04 gid_map
-r--------  1 root root 0 7月  17 17:04 io
-r--r--r--  1 root root 0 7月  17 17:04 limits
-rw-r--r--  1 root root 0 7月  17 17:04 loginuid
dr-x------  2 root root 0 7月  17 17:04 map_files
-r--r--r--  1 root root 0 7月  17 16:43 maps
-rw-------  1 root root 0 7月  17 17:04 mem
-r--r--r--  1 root root 0 7月  17 16:43 mountinfo
-r--r--r--  1 root root 0 7月  17 17:04 mounts
-r--------  1 root root 0 7月  17 17:04 mountstats
dr-xr-xr-x  6 root root 0 7月  17 16:43 net
dr-x--x--x  2 root root 0 7月  17 17:04 ns
-r--r--r--  1 root root 0 7月  17 17:04 numa_maps
-rw-r--r--  1 root root 0 7月  17 17:04 oom_adj
-r--r--r--  1 root root 0 7月  17 17:04 oom_score
-rw-r--r--  1 root root 0 7月  17 17:04 oom_score_adj
-r--r--r--  1 root root 0 7月  17 17:04 pagemap
-r--------  1 root root 0 7月  17 17:04 patch_state
-r--r--r--  1 root root 0 7月  17 17:04 personality
-rw-r--r--  1 root root 0 7月  17 17:04 projid_map
lrwxrwxrwx  1 root root 0 7月  17 17:04 root -> /
-rw-r--r--  1 root root 0 7月  17 17:04 sched
-r--r--r--  1 root root 0 7月  17 17:04 schedstat
-r--r--r--  1 root root 0 7月  17 17:04 sessionid
-rw-r--r--  1 root root 0 7月  17 17:04 setgroups
-r--r--r--  1 root root 0 7月  17 17:04 smaps
-r--r--r--  1 root root 0 7月  17 17:04 stack
-r--r--r--  1 root root 0 7月  17 16:43 stat
-r--r--r--  1 root root 0 7月  17 16:43 statm
-r--r--r--  1 root root 0 7月  17 16:43 status
-r--r--r--  1 root root 0 7月  17 17:04 syscall
dr-xr-xr-x 55 root root 0 7月  17 17:04 task
-r--r--r--  1 root root 0 7月  17 17:04 timers
-rw-r--r--  1 root root 0 7月  17 17:04 uid_map
-r--r--r--  1 root root 0 7月  17 17:04 wchan

jar包位置

[root@localhost /]# find -name "jeeplus-vue.jar"
./var/apps/maintenanceSystem/jeeplus-vue.jar

运行Java脚本

[root@localhost /]# cd /var/apps/maintenanceSystem
[root@localhost maintenanceSystem]# ls
api.log  application-production.yml  jeeplus-vue.jar  log  startup.sh  template  tpid  wz.png
[root@localhost maintenanceSystem]# ./startup.sh
-bash: ./startup.sh: 权限不够
[root@localhost maintenanceSystem]# sh startup.sh
11861
maintenanceSystem java serv is kill!
maintenanceSystem java serv is started.
[root@localhost maintenanceSystem]# . startup.sh
26669
maintenanceSystem java serv is kill!
maintenanceSystem java serv is started.
[root@localhost maintenanceSystem]# source startup.sh
26960
maintenanceSystem java serv is kill!
maintenanceSystem java serv is started.

1、第一种方式,是在当前的shell执行脚本本身,也就是说把test.sh当成一个文件执行,这时候我们需要拥有test.sh的运行权限(x权限),而且当我们在执行此命令时,有2个新进程在运行,一个是test.sh,一个是sleep,如果我们在执行第一个sleep时按ctrl+c终止脚本,test.sh和sleep一起终止,并且第二个sleep不会执行,因为整个test.sh运行已经终止。

2‘第二种方式,是新建一个shell执行test.sh脚本里面的命令,不需要执行权限,有读取权限(r权限)即可,在执行此命令时,有2个新进程在运行,一个是bash,一个是sleep,如果执行第一个sleep时按ctrl+c,bash被终止,结果和第一种方式一样,第二个sleep不会执行。

3、第三种方式,是在当前shell执行test.sh里面的命令,不需要执行权限,有读取权限(r权限)即可,在执行此命令时,只有一个新进程在运行,就是sleep,如果在执行第一个sleep时按ctrl+c终止,那么第二个sleep接着运行,直到脚本所有命令执行完。

4、第四种方式和第三种方式一致。

Shell脚本解析

[root@localhost maintenanceSystem]# cat startup.sh
#!/bin/bash # #!表示可执行的程序
cd /var/apps/maintenanceSystem # .sh脚本地址
tpid=`cat tpid|awk '{print $1}'` 
# tpid是一个文件,里面主要负责记录所启动的jar的进程id,也就是pid。这里是将文件tpid的第一个字段给提了出来赋给tpid这个变量。awk命令其实是将每一行的第某个字段提取出来,这里tpid文件只有一行且只有一个字段,所以该处命令就是将tpid里的内容取出来。

tpid=`ps -aef|grep $tpid|awk '{print $2}'|grep $tpid`
# ps -aef 将所有进程查出来,得出结果1;
# grep $tpid 在结果1的基础上将涉及变量tpid的内容查出来,得出结果2;
# awk ‘{print $2}’ 在结果2的基础上将每行的第二个字段提取出来,得出结果3;
# grep $tpid 在结果3的基础上查找到与变量tpid一样的值更新tpid的值。

if [ ${tpid} ];
then
 echo $tpid
 kill -9 $tpid
 echo 'maintenanceSystem java serv is kill!' # 输出文字
# 判断是否不为空。若是tpid的值不为空,那么就证明该进程在运行当中,则杀死进程

else
  rm -f tpid
  touch tpid
# 若是tpid的值为空,先强制删除文件,再次创建文件

fi
  nohup java -jar jeeplus-vue.jar >api.log 2>log & 
  echo 'maintenanceSystem java serv is started.' # 输出文字
  echo $! > tpid
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值