Linux 运行jar ,后台进程运行jar 和结束后台正在运行的jar

本文介绍如何将 Java UDP Socket 项目从 Windows 平台移植到 Linux,并详细记录了安装 Java 环境、打包成 jar 文件、在 Linux 下执行 jar 文件及后台运行的方法。

最近搞了一个java UDP Socket,先是在win下写,后来老大让在linux下运行,%&656¥5&*……%&……¥7*

/**********吐槽结束,开始正文****************/

1.首先win下的java运行怎样在linux shell 里执行,如果只有单一的一个主入口非常简单的java xxxx.java javac xxxx.java 什么的就行,网上一大堆,想在我的项目里导入了gson.jar 还有javabean解析gson用,在网上找了半天没找到,弃了,后来我就把项目打成jar包,详情参考博客  http://blog.youkuaiyun.com/xiaoguaihai/article/details/42462761

2. 安装linux下的java环境,这就不说了 三四行代码下载就行了 YouTube 有Ubuntu安装java8的视频

3..然后我将jar包拷贝到l我的linux 虚拟机上,我放在了桌面,cd到目录

    命令行为 cd /home/pf/Desktop/

   然后是java -jar  server,jar(这里的serve.jar是我jar包名,可以自己替换成xxxx.jar)

4.接下来又是一个坑,UDP我还有个客户端,如果不终止客户端,怎样在后台进程运行我服务端的jar包 参考博客 http://blog.youkuaiyun.com/qq_30739519/article/details/51115075

   输入命令行 java -jar server.jar &

   这时 ctrl + c,jar包也可以在后台运行了

{  

如果你想将控制台打印日志存下来就不要用 上面后台运行那条

 而是用  java -jar server.jar &> XXXX (XXXX为你想保存的文件名,我一般起名为log.txt,所以命令行为 java -jar server.jar &> log.txt,这样在运行的文件夹就有一个log.txt的日志文件了)

此时就直接ctril +c 就好了,客户端也ctrl +c 就好了 直接跳过第五步

}

5. 结束后台jar的进程、在stackoverflow找的: https://stackoverflow.com/questions/17164898/how-to-stop-an-executed-jar-file

   输入命令行 ps -ef | grep java 列出后台进程 

 然后输入sudo kill -9 xxxx (xxxx为上条命令列出的后台进程的pid, -9 表示无条件终止)

 至此就结束了你的进程



### Linux 后台运行 jar 包的方法或命令 在 Linux 系统中,可以通过多种方式以后台方式运行 jar 包。以下是几种常见且有效的方法: #### 方法一:使用 `&` 符号 通过在命令末尾添加 `&` 符号,可以将任务放到后台运行。然而,这种方式的缺点是当终端关闭时,程序也会随之停止。 ```bash java -jar your-application.jar & ``` 这种方式适用于临时运行的任务,但不建议用于生产环境[^2]。 #### 方法二:使用 `nohup` 命令 `nohup` 是一个常用的工具,用于忽略挂起信号(SIGHUP),即使终端关闭,程序仍然会继续运行。默认情况下,`nohup` 的输出会被重定向到当前目录下的 `nohup.out` 文件中,如果当前目录不可写,则会尝试写入用户主目录下的 `nohup.out` 文件。 ```bash nohup java -jar your-application.jar > /dev/null 2>&1 & ``` 上述命令中,`> /dev/null 2>&1` 表示将标准输出错误输出都丢弃,避免生成 `nohup.out` 文件[^4]。 #### 方法三:使用 `screen` 或 `tmux` `screen` `tmux` 是两款终端复用工具,可以创建独立的会话,在终端关闭后依然保持运行。以 `screen` 为例: ```bash screen -S myapp java -jar your-application.jar # 按 Ctrl+A 再按 D 键,回到主终端,screen 会话将继续运行 ``` 要重新连接到该会话,可以执行以下命令: ```bash screen -r myapp ``` 这种方法适合需要长时间运行的任务,并且可以随时重新连接到会话中查看输出[^3]。 #### 方法四:使用 `systemd` 服务 对于生产环境中的 jar运行,推荐使用 `systemd` 创建服务文件来管理应用。首先创建一个服务文件,例如 `/etc/systemd/system/myapp.service`: ```ini [Unit] Description=My Application After=network.target [Service] User=youruser ExecStart=/usr/bin/java -jar /path/to/your-application.jar SuccessExitStatus=143 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target ``` 然后启用并启动服务: ```bash systemctl daemon-reload systemctl enable myapp systemctl start myapp ``` 这种方式的优点是可以自动重启失败的服务,并且可以通过 `systemctl` 命令轻松管理服务状态[^1]。 #### 方法五:记录 PID 并保存 如果需要手动管理进程,可以结合 `&` PID 文件的方式: ```bash java -jar your-application.jar > app.log 2>&1 & echo $! > /var/run/your-application.pid ``` 通过读取 PID 文件,可以方便地停止或检查进程状态: ```bash kill $(cat /var/run/your-application.pid) ``` 这种方法适合需要手动控制进程的应用场景[^3]。 ### 示例代码 以下是一个完整的脚本示例,展示如何以后台方式运行 jar 包并记录 PID: ```bash #!/bin/bash nohup java -jar your-application.jar > app.log 2>&1 & echo $! > /var/run/your-application.pid ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值