热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linuxjavashelljar_linux下shell脚本执行jar文件

最近在搞一个shell脚本启动jar文件个关闭jar文件的东东。搞得我都蛋疼了。今天晚上终于弄好了话说,小弟的linux只是刚入门,经过各方查资料终于搞

最近在搞一个shell脚本启动jar文件个关闭jar文件的东东。搞得我都蛋疼了。今天晚上终于弄好了

话说,小弟的linux只是刚入门,经过各方查资料终于搞定了。话不多说,下面开始上小弟写的shell脚本

1 #!/bin/bash2 #description: 启动重启server服务3 #端口号,根据此端口号确定PID4 PORT=9997

5 #启动命令所在目录6 HOME='/usr/etc/server/java/server'

7

8 #查询出监听了PORT端口TCP协议的程序9 pid=`netstat -anp|grep $PORT|awk '{printf $7}'|cut -d/ -f1`10

11

12 start(){13 if [ -n "$pid" ]; then

14 echo "server already start,pid:$pid"

15 return 0

16 fi

17 #进入命令所在目录18 cd $HOME19 nohup java -jar $HOME/pserver9997.jar > $HOME/server.log 2>&1 启动聊天服务器 把日志输出到HOME目录的server.log文件中20 echo "start at port:$PORT"

21 }22

23 stop(){24 if [ -z "$pid" ]; then

25 echo "not find program on port:$PORT"

26 return 0

27 fi

28 #结束程序,使用讯号2,如果不行可以尝试讯号9强制结束29 kill -9$pid30 rm -rf $pid31 echo "kill program use signal 2,pid:$pid"

32 }33 status(){34 if [ -z "$pid" ]; then

35 echo "not find program on port:$PORT"

36 else

37 echo "program is running,pid:$pid"

38 fi

39 }40

41 case $1 in

42 start)43 start44 ;;45 stop)46 stop47 ;;48 restart)49 $0stop50 sleep 2

51 $0start52 ;;53 status)54 status55 ;;56 *)57 echo "Usage: {start|stop|status}"

58 ;;59 esac

60

61 exit 0

上面是小弟写的shell脚本。写的不好请见谅。

首先遇到的第一个坑

我在window下写的 然后道linux中执行,在linux死活都说俺的19行有错误,俺就不明白了,哪里有错,问了下别人,也说没错。突然有个高人问我在哪编写的,小弟回答在win下,他告诉俺执行下这个命令:

dos2unix server.sh

然后小弟就执行了,说命令不存在,小弟只好安装这个,执行了以下命令

yum install dos2unix

等他执行完了 小弟在执行dos2unix server.sh

然后在执行.server.sh start ,

他居然奇迹的可以了。

小弟问了下是什么原因。人家高人,默默地回答了句,win下的换行跟linux下不一样。小弟才疏学浅,智能默默地求助度娘了。

让我找到了这个说法:

Linux和Windows和换行符不一样。Windows下是CRLF(\r\n或0d0a),Linux下是LF(\n或0a)。在Linux下有时会遇到从Windows过来的文本文件,这些文件带了Windows换行符,Linux下进行脚本处理时有可能会出一些莫名其妙的错误。因此需要将这些文件转换为Linux换行符。

然后人家这个高人用了别的方法。具体的链接可以看下 http://blog.chinaunix.net/uid-20726500-id-4492875.html

然后俺就欣喜若狂了,终于可以了。

然而当我执行stop方法有出现坑了。

根本没法执行,出现了如下的东东:

55f16c1af5b77e0dc8b52aa7b636fbc4.png

他居然说这个id没有找到,小弟当时无语了,难道是他没有找到要kill 的这个进程的id,有这个猜想,小弟果断执行了以下命令:

afceb5b491cfa3b0f5215cec3512553e.png

小弟,当时目瞪口呆了,这个命令执行出来是什么啊。kill命令一般是 kill -9(当然这个是强制杀死) pid啊 这个不是啊 应该是kill -9 1556,想到这 我应该获取的是1556这个pid,怎么获取呢。小弟又请出我们伟大的度娘了,搜索了一番,终于让我找到了这个命令:

netstat -anp|grep 9997|awk '{printf $7}'|cut -d/ -f1,截图如下

dd6bd588cd10488510d672a35e4b7314.png

这个值,才是俺想要的嘛,果断改了下第7行的命令,改成了这个。小弟不才,直接用vim改的

c2c3cd789577ae460628b0b1f615b0b9.png

然后wq保存,下面就是看下kill掉了吗?

然后执行 server.sh stop命令, 在控制台上输出了

49741e2e1c8d79e49ab7c8639973eaef.png

看到这个,应该是kill掉了。

至此已经完成了。

那么这个获取pid命令,小弟还是不太懂 awk 是什么鬼?cut 倒是知道什么意思。

然后这时候又请出了神奇的度娘。多方打探、搜索,小弟搜到了这个

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理,具体链接请看下面的

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

通过这个链接大体的也了解了

它上面有个这个解释

此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推

小弟有个这个 awk '{printf $7}'

afceb5b491cfa3b0f5215cec3512553e.png

那么这个$7是啥意思呢,就是取到得得1556/java这个值,不信,自己属下是不是第七个。

那么既然找到了这个那怎么取1556呢,如果是在java、php、js中很容易,但是在linux下呢,那么就需要cut命令了,cut顾名思义了,我也不多解释了,

具体用法,可以参考如下文章

http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html

他有一个-d 是自定义分隔符的,那么就可以cut -d/

这个的意思是js中的split差不多意思

然后我再取第一个不就行了

总结起来就是 cut -d/ -f 1

就取到这个值了。

通过这个,小弟确实学了不少,也了解到小弟linux的水平了。

下一步就是添加到定时任务中。

当然就是crontab

安装crontab:

yum install crontabs

说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

查看crontab服务状态:service crond status

手动启动crontab服务:service crond start

查看crontab服务是否已设置为开机启动,执行命令:ntsysv

加入开机自动启动:

chkconfig –level 35 crond on

1,crontab命令

功能说明:设置计时器。

语  法:crontab [-u ][配置文件] 或 crontab [-u ][-elr]

补充说明:cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:

Minute Hour Day Month DayOFWeek Command

参  数:

-e  编辑该用户的计时器设置。

-l  列出该用户的计时器设置。

-r  删除该用户的计时器设置。

-u  指定要设定计时器的用户名称。

2,crontab 格式

基本格式 :

* *  *  *  *  command

分 时 日 月 周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列 表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

# Use the hash sign to prefix a comment

# +—————- minute (0 – 59)

# | +————- hour (0 – 23)

# | | +———- day of month (1 – 31)

# | | | +——- month (1 – 12)

# | | | | +—- day of week (0 – 7) (Sunday=0 or 7)

# | | | | |

# * * * * * command to be executed

加入crontab中

0 22 * * * /root/sh/server.sh restart

好了就是这些东东了。有错误请指正



推荐阅读
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文详细探讨了Java命令行参数的概念、使用方法及在实际编程中的应用,包括如何通过命令行传递参数给Java程序,以及如何在Java程序中解析这些参数。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 本文深入探讨了 PHP 实现计划任务的方法,包括其原理、具体实现方式以及在不同操作系统中的应用。通过详细示例和代码片段,帮助开发者理解和掌握如何高效地设置和管理定时任务。 ... [详细]
author-avatar
丶原色调
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有