Java 如何在Debian服务器上连续自动运行.jar?
我有一个Java 如何在Debian服务器上连续自动运行.jar?,java,ssh,jar,cygwin,debian,Java,Ssh,Jar,Cygwin,Debian,我有一个.jar文件,我想一直在Debian服务器上运行 目前,我已经知道如何通过Cygwin上的ssh访问服务器,并启动.jar。但是当我关闭开发机器上的Cygwin窗口时,它会终止服务器上的进程(我认为,因为它不再响应) 目前我是这样开始的: java -jar myjar.jar packageName.fileNameOfFileWithMainMethod 我需要让这个文件在服务器上自动持续运行(它是我正在开发的系统的一个组成部分) 不幸的是,我对服务器管理或一般的非windows操
.jar
文件,我想一直在Debian
服务器上运行
目前,我已经知道如何通过Cygwin
上的ssh
访问服务器,并启动.jar
。但是当我关闭开发机器上的Cygwin窗口时,它会终止服务器上的进程(我认为,因为它不再响应)
目前我是这样开始的:
java -jar myjar.jar packageName.fileNameOfFileWithMainMethod
我需要让这个文件在服务器上自动持续运行(它是我正在开发的系统的一个组成部分)
不幸的是,我对服务器管理或一般的非windows操作系统几乎一无所知(选择或制作服务器的不是我),所以我真的不知道该做什么,也不知道该搜索什么(显然,因为我的搜索没有给出可用的结果)
我读过(并编辑过,因为文本很乱)这个问题,但尽管我觉得它可能暗示了正确的方向,但我并没有从中得到多少帮助。我也尝试了我最好的谷歌搜索引擎,但它给了我很多只与之相关的结果
我想我必须制作某种脚本(可能包含上面的代码行),对它做一些事情,并将它放在服务器上特定的位置,以完成我想要做的事情
有人能解释一下这是如何做到的吗?一个简单的建议是使用Linux的运行jar文件 应该可以让您正确地使用cron运行jar文件 或者,它也清晰简洁 例如:
crontab-e
0****java-jar myjar.jar packageName.filenameoffileWithMain方法
在每小时的最高峰运行jar文件。或者,要在服务器启动时启动它,请输入@reboot java-jar myjar.jar packageName.filenameoffileWithMain方法
一个简单的建议是使用Linux的运行jar文件 应该可以让您正确地使用cron运行jar文件 或者,它也清晰简洁 例如:
crontab-e
0****java-jar myjar.jar packageName.filenameoffileWithMain方法
在每小时的最高峰运行jar文件。或者,要在服务器启动时启动它,请输入@reboot java-jar myjar.jar packageName.filenameoffileWithMain方法
最简单的解决方案是使用
nohup
和分离进程:
nohup java -jar myjar.jar packageName.fileNameOfFileWithMainMethod &
使用kill
命令可以停止进程
进程id可通过ps-ef | grep packageName.filenameoffileWithMain方法找到
但是,如果您正在开发在服务器上长期运行的严肃应用程序,您必须处理初始化系统,如systemd、upstart或类似的东西。最简单的解决方案是使用nohup
和分离进程:
nohup java -jar myjar.jar packageName.fileNameOfFileWithMainMethod &
使用kill
命令可以停止进程
进程id可通过ps-ef | grep packageName.filenameoffileWithMain方法找到
但是,如果您正在开发在服务器上长期运行的严肃应用程序,您必须处理初始化系统,如systemd、upstart或类似的东西。Shell钩子适合配置用户环境变量
Cron用于计划作业,主要是相关维护,如创建备份、管理日志文件等
在开发过程中,按照ааааааааааааааааааааааааа
但无法处理服务器关闭清理,或响应重新启动
上面提到的初始化脚本是启动/停止服务的标准方式
有一个名为init的应用程序,它是类Unix系统启动时启动的第一个应用程序。
Init根据运行级别启动一些脚本,这些脚本管理守护进程(Windows中的服务)。
所以对于服务,你写“钩子”是为了
在Debian中,/etc/init.d/您将初始化脚本放在哪里,
您可以阅读此文件夹中的脚本以了解想法,
它们是文本文件(bash脚本)
使用参数调用这些脚本
(a标准关键字,如“开始”、“停止”等…)
/etc/rc?.d/(其中?是运行级别之一),init在其中查找要运行的脚本。
但是这些脚本只是指向/etc/init.d/中脚本的“自动创建”符号链接
您不需要触摸/etc/rc?.d/文件夹中的任何内容。
*将脚本放入/etc/init.d/,
您只需调用创建符号链接*:
sudo update-rc.d "your-scripts-name" defaults
正如您所看到的,脚本名称附加了一些前缀;
例如/etc/rc1.d/K10apache2,它是指向/etc/init.d/apache2的符号链接
因此,简单的“按名称排序执行”在这里是可能的
自动创建这些前缀(因此执行顺序),
需要依赖项信息。
所以init脚本包含了这些信息。
还需要在何时(在哪个运行级别)调用这些脚本(使用“开始”或“停止”)的信息
此依赖关系信息作为注释放置在这些脚本中。
例如,apache服务器初始化脚本(/etc/init.d/apache2)包括这些行
# Provides: apache2
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
详细信息存在于Debian策略中
这也是有用的;
注:
Unix世界中存在着巨大的转变和争论/分裂。
初始化