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

用户2909100

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

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

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 one-liners 中完成所有这些事情。但就我个人而言,我尽量避免在 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章