在linux下利用nohup来后台运行java程序
2015-06-27 12:43
615 查看
最近要写一个程序来刷新一下memcached中的缓存信息,于是写一个java main来去进行清理,如果在command line直接运行程序,如
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest
有人说要最后加一个&即可,可是我没有弄成功,况且linux提供了更好的方法。
这样虽然使java main正确运行,但是会占据你的一个ssh窗口,如果要有多个java main同时运行,那么你又要另启动一个ssh窗口来去以类似的方法运行另一个java main,那么有没有更好的方法来解决这种需求呢?答案是肯定的,在linux系统中可以利用nohup来执行任何命令,并把命令自动调到linux后台运行,不锁定当前ssh窗口,也不会被ctrl
+ c,alt + F4之类打断程序的动行。如:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest &
这样执行后,nohup会把执行结果中的日志输出到当前文件夹下面的nohup.out文件中,
我们也可以手动指定一个参数来规定日志文件的输出地点,如:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest [color=red]> /home/logs/firstlog.log[/color] &
这样日志就会输出在/home/logs/firstlog.log文件里。
如果我们想执行多个java main,那么我们只需要以同样的方式去执行其他的java main.
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.SecondTest [color=red]> /home/logs/secondlog.log[/color] &
那么我们怎么调出所有用nohup执行的程序呢?
只需要一句命令:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
jobs
那么就会列出所有nohup执行的后台程序,并且每个程序前面都有个编号。
如果想将某个程序调回前台控制,只需要 fg + 编号即可。
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
fg 1
那么编号为1的程序就会调回到前台,这时如果要终止程序,只需ctrl + c 即可退出程序。
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest
有人说要最后加一个&即可,可是我没有弄成功,况且linux提供了更好的方法。
这样虽然使java main正确运行,但是会占据你的一个ssh窗口,如果要有多个java main同时运行,那么你又要另启动一个ssh窗口来去以类似的方法运行另一个java main,那么有没有更好的方法来解决这种需求呢?答案是肯定的,在linux系统中可以利用nohup来执行任何命令,并把命令自动调到linux后台运行,不锁定当前ssh窗口,也不会被ctrl
+ c,alt + F4之类打断程序的动行。如:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest &
这样执行后,nohup会把执行结果中的日志输出到当前文件夹下面的nohup.out文件中,
我们也可以手动指定一个参数来规定日志文件的输出地点,如:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest [color=red]> /home/logs/firstlog.log[/color] &
这样日志就会输出在/home/logs/firstlog.log文件里。
如果我们想执行多个java main,那么我们只需要以同样的方式去执行其他的java main.
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.SecondTest [color=red]> /home/logs/secondlog.log[/color] &
那么我们怎么调出所有用nohup执行的程序呢?
只需要一句命令:
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
jobs
那么就会列出所有nohup执行的后台程序,并且每个程序前面都有个编号。
如果想将某个程序调回前台控制,只需要 fg + 编号即可。
Java代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/e7676eb8635dd9d6a4073dba3eeeafe5.png)
fg 1
那么编号为1的程序就会调回到前台,这时如果要终止程序,只需ctrl + c 即可退出程序。
相关文章推荐
- linux6.4DNS辅助
- Linux---如何将普通用户加入root用户组
- redhat 替换centos yum 后,安装wireshark 无法使用
- 2015年CSDN对嵌入式Linux专家,100ask创始人韦东山的采访
- 最近在学习Linux,下面是一些学习笔记,以后会不定期更新,以此做总结.
- 作为一个新人,怎样学习嵌入式Linux?(转自韦东山)
- linux命令eval的用法
- Linux_5.2_线程互斥
- 用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发 分类: arm-linux-Ubuntu Windows-嵌入式 2015-06-27 11:59 393人阅读 评论(0) 收藏
- Linux学习笔记
- Linux 下编译并安装配置 Qt (完整版)
- Linux操作系统及ubuntu相关
- Linux入门篇之三:虚拟机的快照和克隆
- Linux启动与禁止SSH用户及IP的登录
- Linux下Telnet、FTP、SSH、SFTP、SCP
- linux下,改变默认的jdk版本
- linux交叉工具链总结
- Linux系统库函数 -- lseek函数用法
- Linux虚拟地址->物理地址
- Linux应用编程:fork与vfork的区别