Linux 相关操作 查看系统信息 1 2 3 4 5 6 cat /proc/version 查看系统版本 uname -a cat /proc/cpuinfo cat /etc/redhat-release getconf -a 查看系统所有变量 getconf LONG_BIT 查看系统位数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量资源 # free -m # 查看内存使用量和交换区使用量 # df -h # 查看各分区使用情况 # du -sh <目录名> # 查看指定目录的大小 # grep MemTotal /proc/meminfo # 查看内存总量 # grep MemFree /proc/meminfo # 查看空闲内存量 # uptime # 查看系统运行时间、用户数、负载 # cat /proc/loadavg # 查看系统负载磁盘和分区 # mount | column -t # 查看挂接的分区状态 # fdisk -l # 查看所有分区 # swapon -s # 查看所有交换分区 # hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备) # dmesg | grep IDE # 查看启动时IDE设备检测状况网络 # ifconfig # 查看所有网络接口的属性 # iptables -L # 查看防火墙设置 # route -n # 查看路由表 # netstat -lntp # 查看所有监听端口 # netstat -antp # 查看所有已经建立的连接 # netstat -s # 查看网络统计信息进程 # ps -ef # 查看所有进程 # top # 实时显示进程状态用户 # w # 查看活动用户 # id <用户名> # 查看指定用户信息 # last # 查看用户登录日志 # cut -d: -f1 /etc/passwd # 查看系统所有用户 # cut -d: -f1 /etc/group # 查看系统所有组 # crontab -l # 查看当前用户的计划任务服务 # chkconfig –list # 列出所有系统服务 # chkconfig –list | grep on # 列出所有启动的系统服务程序 # rpm -qa # 查看所有安装的软件包 iostat 显示存储细节 cat /proc/meminfo 显示内存使用 mpstat -P ALL 显示每个CPU状态 pmap 显示进程占用内存量 pstree -p 显示进程父子关系
16 个 Linux 服务器监控命令https://roclinux.cn/?p=2549
tail 1 tail -f catalina.out|grep --color -B 20 'com.ync365.seed.service.user.impl'
关闭 selinux 打开/etc/selinux/config
,把SELINUX=enforcing
改为SELINUX=disabled
epel 源 https://dl.fedoraproject.org/pub/epel/6/x86_64/
1 rpm -ivh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
pushd popd 切换目录 让切换目录更方便: pushd,popd,dirs,cd -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 一,为何要使用这几个命令? 可能大家会有疑问,为何要使用这几个命令, 难道用cd不就可以切换目录了吗? 没错,使用cd就可以切换到需要访问的目录, 但是有时会是一个路径很长,层次很多的目录,进到此目录下后,这时我们不小心运行了 cd命令, 理所当然,我们回到了自己的home目录,这时如果想回去怎么办? 还有:因为工作的需要,我们需要不停在几个很深层的目录之间切换,不止一个, 那么即使有tab键帮忙,我们也会因为一个cd命令花费很多时间,如何在多个目录之间切换时能更方便些 pushd,popd是我们的好帮手 说明: pushd,popd,dirs这几个我们讲到的命令是bash内建的命令, 所以只要登录到了bash,这几个命令就可以使用了 二,如何在两个目录之间切换? 如果只是在两个目录之间切换,那么还不必使用pushd, 这时只需使用 cd -就可以了 cd -的作用是可以回到前一个目录, 看例子: [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/ [root@localhost pics]# cd - /root [root@localhost ~]# cd - /usr/share/kde4/apps/kget/pics [root@localhost pics]# 怎么样?在两个目录之间切换非常方便,无需再输入很长的路径 说明: 为何cd -能够回到前一个目录? 这是因为 -在此处等同于 $OLDPWD变量, 此问题可以参见bash的info信息, cd 一项有相关的说明: An argument of - is equivalent to $OLDPWD. $OLDPWD变量就是bash所记录的前一个目录 也就是说:$OLDPWD和-相等 下面我们再看一个例子: [root@localhost ~]# cd /usr/share/kde4/apps/kget/pics/ [root@localhost pics]# echo $OLDPWD; /root [root@localhost pics]# cd $OLDPWD [root@localhost ~]# echo $OLDPWD; /usr/share/kde4/apps/kget/pics [root@localhost ~]# cd $OLDPWD; [root@localhost pics]# echo $OLDPWD; /root 我们可以得到结构: 用cd -和cd $OLDPWD都可以在最近所操作的两个目录之间进行切换 三,如何在多个目录之间切换? 因为 cd -和 cd $OLDPWD都是只支持最近操作的两个目录,所以要在多个目录之间操作时, 我们需要使用 pushd 1, 先来介绍我们会用到的3条命令 pushd:切换到作为参数的目录,并把原目录和当前目录压入到一个虚拟的堆栈中 如果不指定参数,则会回到前一个目录,并把堆栈中最近的两个目录作交换 popd: 弹出堆栈中最近的目录 dirs: 列出当前堆栈中保存的目录列表 看例子: [root@localhost ~]# pushd /usr/local/sbin/ /usr/local/sbin ~ [root@localhost sbin]# dirs /usr/local/sbin ~ [root@localhost sbin]# dirs -p -v 0 /usr/local/sbin 1 ~ [root@localhost sbin]# pushd /usr/share/kde4/apps/kget/ /usr/share/kde4/apps/kget /usr/local/sbin ~ [root@localhost kget]# dirs -p -v 0 /usr/share/kde4/apps/kget 1 /usr/local/sbin 2 ~ 说明: dirs的 -p参数可以每行一个目录的形式显示堆栈中的目录列表 -v参数可以在目录前加上编号 注意:有 -v时,不添加 -p也可以每行一个目录的形式显示 说明之二:我们可以看到:最近压入堆栈的目录位于最上面 2,如何在最近的两个目录之间切换? 在最近的两个目录之间切换:用pushd不加参数即可 [root@localhost kget]# pushd /boot/grub/ /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~ [root@localhost grub]# dirs -v 0 /boot/grub 1 /usr/share/kde4/apps/kget 2 /usr/local/sbin 3 ~ [root@localhost grub]# pushd /usr/share/kde4/apps/kget /boot/grub /usr/local/sbin ~ [root@localhost kget]# dirs -v 0 /usr/share/kde4/apps/kget 1 /boot/grub 2 /usr/local/sbin 3 ~ [root@localhost kget]# pushd /boot/grub /usr/share/kde4/apps/kget /usr/local/sbin ~ [root@localhost grub]# dirs -v 0 /boot/grub 1 /usr/share/kde4/apps/kget 2 /usr/local/sbin 3 ~ 说明:可以看到,用pushd不加参数在最近的两个目录之间切换时, 当前目录总是位于堆栈的最上面 3,如何在多个目录之间切换? 用 pushd +n即可 说明: n是一个数字,有此参数时,是切换到堆栈中的第n个目录,并把此目录以堆栈循环的方式推到堆栈的顶部 需要注意: 堆栈从第0个开始数起 看例子: [root@localhost grub]# dirs -v 0 /boot/grub 1 /usr/share/kde4/apps/kget 2 /usr/local/sbin 3 ~ [root@localhost grub]# pushd +2 /usr/local/sbin ~ /boot/grub /usr/share/kde4/apps/kget [root@localhost sbin]# dirs -v 0 /usr/local/sbin 1 ~ 2 /boot/grub 3 /usr/share/kde4/apps/kget 4,如何把目录从堆栈中删除? 用popd即可 看例子: [root@localhost sbin]# dirs -v 0 /usr/local/sbin 1 ~ 2 /boot/grub 3 /usr/share/kde4/apps/kget [root@localhost sbin]# popd ~ /boot/grub /usr/share/kde4/apps/kget [root@localhost ~]# dirs -v 0 ~ 1 /boot/grub 2 /usr/share/kde4/apps/kget [root@localhost ~]# popd +1 ~ /usr/share/kde4/apps/kget [root@localhost ~]# dirs -v 0 ~ 1 /usr/share/kde4/apps/kget 说明:可以看到popd不加参数的运行情况: popd把堆栈顶端的目录从堆栈中删除,并切换于位于新的顶端的目录 说明之二: popd 加有参数 +n时, n是堆栈中的第n个目录,表示把堆栈中第n个目录从堆栈中删除 四,多学一点知识 1,pushd和popd都可以只影响堆栈而不切换目录 用 -n参数即可 看例子: [root@localhost ~]# dirs -v 0 ~ 1 /usr/share/kde4/apps/kget [root@localhost ~]# pushd -n /boot/grub ~ /boot/grub /usr/share/kde4/apps/kget [root@localhost ~]# dirs -v 0 ~ 1 /boot/grub 2 /usr/share/kde4/apps/kget 2, dirs可以清空目录堆栈 用 -c参数即可 看例子: [root@localhost ~]# dirs -v 0 ~ 1 /boot/grub 2 /usr/share/kde4/apps/kget [root@localhost ~]# dirs -c [root@localhost ~]# dirs -v 0 ~ 说明: 位于堆栈顶部的目录是当前目录,它不能被pop出去的
cp 实现强行覆盖 alias
1 2 3 4 5 6 7 8 9 [root@localhost storage] alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which ='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@localhost storage]
方法一
unaslias cp
(这只是临时取消 cp 的别名,不是永久的)
方法二
输入\cp 命令,作用也是取消 cp 的别名。
方法三
输入yes|cp -fr src dest
,使用管道自动输入 yes。
让管道自动输入一大堆得 yes,就可以完成了强行复制了。 那有人会问 dos 的 copy 命令怎么实现强行复制的呢?答案是 用来 xcopy /y src dest
来实现强行复制。
pkill 命令 来自: https://man.linuxde.net/pkill
pkill 命令可以按照进程名杀死进程。pkill 和 killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用 kill 来杀掉。
语法
选项
1 2 3 4 5 -o:仅向找到的最小(起始)进程号发送信号; -n:仅向找到的最大(结束)进程号发送信号; -P:指定父进程号发送信号; -g:指定进程组; -t:指定开启进程的终端。
参数
进程名称:指定要查找的进程名称,同时也支持类似 grep 指令中的匹配模式。
实例
1 2 3 4 pgrep -l gaim 2979 gaim pkill gaim
也就是说:kill 对应的是 PID,pkill 对应的是 command。
nohup nohup 的用途就是让提交的命令忽略 hangup 信号。
在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上”&”来将命令同时放入后台运行,也可用”>filename 2>&1”来更改缺省的重定向文件名。
nohup 示例
1 2 3 4 5 6 7 [root@xx ~]# nohup ping www.ibm.com & [1] 3059 nohup: appending output to `nohup.out' [root@pvcent107 ~]# ps -ef |grep 3059 root 3059 984 0 21:06 pts/3 00:00:00 ping www.ibm.com root 3067 984 0 21:06 pts/3 00:00:00 grep 3059 [root@xx ~]#
时间设置 linux 时间快 8 小时解决办法 要解决这个问题,首先要确认当前 CMOS 显示的时间是否是当前的时间,如果是则你的 CMOS 是非 UTC 时间(即 CST 当地时间),要修改/etc/sysconfig/clock
文件,将里面的 UTC=true 改为 UTC=false (告诉 Linux 硬件设置的是当地时间)
这个是多数快 8 小时的原因,因为安装 Linux 时默认选项是使用 UTC 时间(可能国外电脑的 CMOS 都是设置的 UTC 时间),系统误认为你的 CMOS 是 UTC 时间,而你又选择了+ 8 的时区,所以 Linux 在 CMOS 时间上加了 8 小时作为系统的时间
更改时区
1 2 3 rm /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
读取硬件时间到系统
输入 Date 查看当前是否为 CST 时间(CST 表示当地时间,如我们设置的 Shanghai ),如果时间不正确用以下方式修改时间
1 date -s 2010-02-03 12:00:00
将系统时间写入硬件
ntp 安装
设置 ntp 服务器
1 2 3 # Hosts on local network are less restricted. #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap
启动 ntp 服务
设置客户端
1 2 3 4 5 6 7 # Use public servers from the pool.ntp.org project. # Please consider joining the pool (https://www.pool.ntp.org/join.html). #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst server 192.168.100.10
设置 ntpd 随机启动
1 2 chkconfig ntpd on chkconfig ntpd --list
检查 ntp 状态
1 2 3 4 5 6 ntpstat [root@localhost ~]# ntpstat synchronised to NTP server (192.168.100.10) at stratum 4 time correct to within 7968 ms polling server every 64 s [root@localhost ~]#
ifconfig centos mini 安装桌面环境 https://cnzhx.net/blog/centos-yum-install-desktop/
netstat
查看文件占用
查看内存使用
查看操作系统 1 getconfig LONG_BIT 64/32位
xargs 命令 1 2 3 xargs find /sbin -perm +700 |ls -l 这个命令是错误的 find /sbin -perm +700 |xargs ls -l 这样才是正确的 xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨
find 命令 1 find . -name '.project' -print -exec rm -rf {} \; 递归删除
查看路由信息(经过网关) 1 2 route -n get default route -n get www.google.com
追踪路由 1 traceroute www.google.com
linux serf Serf is a tool for cluster membership, failure detection, and orchestration that is decentralized, fault-tolerant and highly available. Serf runs on every major platform: Linux, Mac OS X, and Windows. It is extremely lightweight: it uses 5 to 10 MB of resident memory and primarily communicates using infrequent UDP messages.https://www.serfdom.io/intro/index.html
lsof 文件相关信息 pid 端口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 lsof `which httpd` //那个进程在使用apache的可执行文件 lsof /etc/passwd //那个进程在占用/etc/passwd lsof /dev/hda6 //那个进程在占用hda6 lsof /dev/cdrom //那个进程在占用光驱 lsof -c sendmail //查看sendmail进程的文件使用情况 lsof -c courier -u ^zahn //显示出那些文件被以courier打头的进程打开,但是并不属于用户zahn lsof -p 30297 //显示那些文件被pid为30297的进程打开 lsof -D /tmp 显示所有在/tmp文件夹中打开的instance和文件的进程。但是symbol文件并不在列 lsof -u1000 //查看uid是100的用户的进程的文件使用情况 lsof -utony //查看用户tony的进程的文件使用情况 lsof -u^tony //查看不是用户tony的进程的文件使用情况(^是取反的意思) lsof -i //显示所有打开的端口 lsof -i:80 //显示所有打开80端口的进程 lsof -i -U //显示所有打开的端口和UNIX domain文件 lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接 lsof -i [email protected] :ftp -r //不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新) lsof -i [email protected] :ftp -n //lsof -n 不将IP转换为hostname,缺省是不加上-n参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 #!/bin/sh # add System paramter to /etc/sysctl.conf fileDesc=`grep "fs.file-max" /etc/sysctl.conf | awk '{print $1}'` if [ "fs.file-max" != "${fileDesc}" ];then echo "file.max not added" cat << EOF >> /etc/sysctl.conf #enhance system performance ,add by ChinaEdustar net.ipv4.tcp_timestamps = 0 net.core.somaxconn = 2048 net.core.netdev_max_backlog = 4096 net.core.dev_weight = 64 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp_keepalive_probes = 5 net.core.rmem_default = 110592 net.core.rmem_max = 262141 net.ipv4.tcp_rmem = 4096 98304 349520 net.core.wmem_default = 262141 net.core.wmem_max = 8388608 net.ipv4.tcp_wmem = 4096 65535 8388608 net.ipv4.tcp_mem = 8388608 8388608 8388608 net.core.optmem_max = 20480 fs.file-max = 209708 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 kernel.panic = 1 EOF else echo "added" fi echo 209708 >/proc/sys/fs/file-max fileDesc=`grep "nofile" /etc/security/limits.conf | awk '{print $1}'` if [ "*" != "${fileDesc}" ];then echo "* - nofile 209708" >> /etc/security/limits.conf else echo "limits.conf has added" fi if [ -f /etc/security/limits.d/90-nproc.conf ]; then sed -i 's/nproc.*1024/nproc 209708/g' /etc/security/limits.d/90-nproc.conf fi if [ "`rpm -qa | grep crontabs`" == "" ]; then yum install -y crontabs fi chkconfig crond --level 345 on if [ "`rpm -qa | grep ntpdate`" == "" ]; then yum install -y ntpdate fi if [ "`grep "ntpdate" /etc/crontab`" == "" ]; then echo ntpdate not added echo "15 5 * * * root ntpdate -u time.ustc.edu.cn" >> /etc/crontab echo "16 5 * * * root ntpdate -u 192.43.244.18 210.72.145.44 210.0.235.14 59.124.196.84" >> /etc/crontab fi yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel wget lrzsz openssh-clients ntpdate apr-devel telnet
Jenkins 重启 dubbo 服务脚本 service-restart.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #!/bin/sh source /etc/profileexport JAVA_HOME=/usr/local /jdk1.7.0_75export JRE_HOME=$JAVA_HOME /jreif [ $# != 3 ] ; then echo "USAGE: $0 SERVICE_DIR SERVICE_NAME_PRE DISCONF_ENV" echo " e.g.: $0 /opt/ync-goods ync-goods rd" exit 1;fi SERVICE_DIR=$1 SERVICE_NAME_PRE=$2 DISCONF_ENV=$3 DISCONF_HOST=192.168.88.30:8080 DISCONF_APP=cwang DISCONF_VERSION=1.0.0 cd $SERVICE_DIR P_ID=`jps -ml|grep "$SERVICE_NAME_PRE " |awk '{print $1}' ` if [ "$P_ID " == "" ]; then echo "=== $SERVICE_NAME process not exists or stop success" else echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID " kill -9 $P_ID fi sleep 3 JAR_NAME=`ls -rt *.jar|grep -v 'sources' |tail -1` echo "START JAR_NAME " $JAR_NAME nohup $JRE_HOME /bin/java -Xms256m -Xmx512m -jar -Ddisconf.env=$DISCONF_ENV -Ddisconf.conf_server_host=$DISCONF_HOST -Ddisconf.app=$DISCONF_APP -Ddisconf.version=$DISCONF_VERSION -Ddisconf.user_define_download_dir=.classes -Ddisconf.enable.remote.conf=true $JAR_NAME >$SERVICE_NAME_PRE .log 2>&1 & ls *.jar|grep -v $JAR_NAME |xargs rm -rf exit 0
service-region.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #!/bin/sh export JAVA_HOME=/usr/local /jdk1.7.0_75export JRE_HOME=$JAVA_HOME /jreAPP_NAME=region SERVICE_DIR=/opt/ync-region FILE_NAME=`ls /opt/ync-region| grep '.[0-9]' .jar` SERVICE_NAME=$FILE_NAME JAR_NAME=$SERVICE_NAME PID=$SERVICE_NAME \.pid cd $SERVICE_DIR case "$1 " in start) nohup $JRE_HOME /bin/java -Xms256m -Xmx512m -Ddisconf.env=qa -Ddisconf.conf_server_host=192.168.88.30:8080 -Ddisconf.app=cwang -Ddisconf.version=1.0.0 -Ddisconf.user_define_download_dir=.classes -Ddisconf.enable.remote.conf=true -jar $JAR_NAME >/dev/null 2>&1 & echo $! > $SERVICE_DIR /$PID echo "=== start $SERVICE_NAME " ;; stop) sleep 5 P_ID=`ps -ef | grep -w "$SERVICE_NAME " | grep -v "grep" | awk '{print $2}' ` if [ "$P_ID " == "" ]; then echo "=== $SERVICE_NAME process not exists or stop success" else echo "=== $SERVICE_NAME process pid is:$P_ID " echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID " fi ;; restart) $0 stop sleep 2 $0 start echo "=== restart $SERVICE_NAME " ;; *) $0 stop sleep 2 $0 start ;; esac exit 0
service-region-tag.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/sh export JAVA_HOME=/usr/local /jdk1.7.0_75export JRE_HOME=$JAVA_HOME /jreAPP_NAME=region FILE_NAME=`ls /opt/ync-region | grep '.[0-9]' .jar` echo "FILE_NAME=====================$FILE_NAME " SERVICE_DIR=/opt/ync-region SERVICE_NAME=$FILE_NAME echo "SERVICE_NAME------------------:$SERVICE_NAME " JAR_NAME=$SERVICE_NAME \.jar PID=$SERVICE_NAME \.pid cd $SERVICE_DIR if ["$FILE_NAME " == "" ];then exit 0; fi sleep 5 P_ID=`ps -ef | grep -w "$SERVICE_NAME " | grep -v "grep" | awk '{print $2}' ` echo "P_ID---------------------------:$P_ID " if [ "$P_ID " == "" ]; then echo "=== $SERVICE_NAME process not exists or stop success" else echo "=== $SERVICE_NAME process pid is:$P_ID " echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID " kill -9 $P_ID fi `rm -rf $FILE_NAME ` exit 0