所以我有一个 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] 删除。
我来说两句