繁体   English   中英

使用绝对路径从终端运行jar文件

[英]Running jar files from terminal using absolute path

所以我有一个jar文件timeline.jar ,它在执行时(使用java -jar timeline.jar从其目录中)在其目录中保存了一些JSON文件。

但是我需要使用以下命令从Crontab执行timeline.jar

5 * * * * java -jar /path/to/timeline.jar

由于我使用的是绝对路径,因此文件不会保存在jar文件的目录中。

现在唯一的解决方案是指定通过java代码保存JSON文件的确切路径,但我宁愿不像那样硬编码。

当然必须有一种方法来从Crontab命令中指定“当前目录”?

如果之前已经问过这个问题,我很抱歉,我读过的答案似乎都没有回答我的问题。 谢谢

当然必须有一种方法来从Crontab命令中指定“当前目录”?

为cron作业指定工作目录的方法是使用作业中的cd命令更改为正确的工作目录:

5 * * * * cd /path/to && java -jar timeline.jar

Cron作业使用shell运行,因此您可以在作业中使用shell语法。 这里的工作是两个命令的序列, cd命令和java命令。 '&&'表示第二个命令(java)仅在第一个命令(cd)成功时运行。

在一般情况下,根据正在运行的命令,您可能需要设置环境变量,更改工作目录,或重定向cron作业中的标准输出和标准错误。 你可以在shell一行中做所有这些事情。 但就个人而言,我尽量避免在crontab文件中使用复杂的shell命令。 如果我需要在crontab中执行复杂的操作,我将编写一个shell脚本并让cron运行该脚本:

#!/bin/bash
cd /path/to && java -jar timeline.jar

...
5 * * * * /home/jdoe/bin/launch-timeline-jar.sh

对于手头的情况来说,这无疑是有点过分。 但是假设您需要设置命令PATH,并且希望在日志文件中捕获程序的错误消息,并且您希望向日志文件添加时间戳,以便您可以知道哪个运行产生了哪些错误。 在shell脚本中表达所有这些内容要比直接在crontab文件中表达要容易得多:

#!/bin/bash

PATH=/some/path/bin:${PATH}      # Set our PATH
cd /path/to || exit 1            # Set the working directory
exec >> timeline.log 2>&1        # Direct output to a logfile
date                             # Write a timestamp to the log
exec java -jar timeline.jar      # Launch the command we came here for

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM