linux - 如何在Linux上安排一个jar文件将来的固定时间?

标签 linux shell jar

我需要在 Linux 计算机上运行一个 jar 文件 (datacollector.jar),例如在固定的时间间隔内运行路径 (/home/vagrant/datatool)。例如,从 2017 年 10 月 6 日 18:00 到 2017 年 11 月 6 日 03:00 future 某个时间。之后,该进程应该被终止。

我想为此编写一个 shell 脚本,它需要两个参数开始结束时间。

脚本还应该通知它是否已经在运行,并且我应该能够在结束时间之前手动停止它。

在网上进行了一些研究后,我无法弄清楚这一点。我怎样才能实现这个目标?

我提出了一个解决方案,其中 myshell.sh 采用 4 个参数
[开始日期] [开始时间] [结束日期] [结束时间]。
和脚本代码:

#!/bin/bash  
JAR_PATH=/home/vagrant/datatool/datacollector.jar
PID_PATH=/tmp/datacollector-id

#calculate wait time to run the jar
wait=$(($(date -d "$1 $2" "+%s")-$(date "+%s")))
wait_mins=$((wait/60))

#calculate time for which jar file should be executed
run_interval=$(($(date -d "$3 $4" "+%s")-$(date -d "$1 $2" "+%s")))
run_interval_mins=$((run_interval/60))

echo "tool will satrt after $wait_mins"

#wait before running jar file
sleep "$wait_mins"m

#run the jar file
nohup java -jar $JAR_PATH /tmp 2>> /dev/null >> /dev/null &

echo $! > $PID_PATH

#wait for jar execution time
sleep "$run_interval_mins"m

#kill the jar process
PID=$(cat $PID_PATH);
echo "tool process killed"
kill $PID;

echo "program terminated"

我正在使用命令运行代码:

$ nohup ./myshell.sh 2017-06-08 20:07:00 2017-06-08 20:10:00 >> scriptoutput.txt  2>> /dev/null &   

和 scriptoutput.txt 包含:

tool will satrt after 3
tool process killed
program terminated

我的代码哪里需要改进? 有没有更好的办法呢?

最佳答案

这并不奇怪:考虑到您的帖子,您可能不被允许修改其源代码并重新编译它。因此,你需要一个外部的东西,一些其他的过程什么

  • 使用 JVM 启动 jar
  • 停止它
  • 通知用户其开始和停止。

最简单的方法是

  • at 命令(您可以用它开始将来的某些事情)
  • cron 命令(您可以定期在后台使用它执行命令)
  • 以及 shell 脚本。

如果只是单次执行,“at”命令是最好的。

通过谷歌搜索“Linux shell 脚本教程”来了解 Linux shell 脚本。您可以在http://unix.stackexchange.com上获得有关您的问题的更具体的答案。 .

关于linux - 如何在Linux上安排一个jar文件将来的固定时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44413989/

相关文章:

linux - ssh: 用户不允许 shell 不存在

java - 为 jar 文件分配版本

scala - 无法使用 :cp command 将 jar 添加到 Scala repl

c++ - linux fork - execl,被执行的进程变成僵尸

linux - 将秒数转换为 hh :mm:ss format (or whatever format Excel or LibreOffice likes) and insert it back to a csv file in Bash

linux - 可以使用 TCPdump/Wireshark 查看多播数据包,但无法在应用程序中接收它

linux - 在 Linode 服务器 Debian 9 上为 php5.6 安装 GD 库时依赖关系中断

bash - 从脚本在后台执行 shell 命令

从数据库删除时出现 MySQL Date_Sub 问题(使用变量)

java - GWT + Eclipse + 外部 JAR 文件