我写了一个 bash 文件,我正在执行 java 文件,如果我执行它,它可以正常工作,但是当我尝试使用 crontab 时它不是,请帮助。
这是我的克朗塔布:
*/5 * * * * /home/import.sh >/dev/null 2>&1
这是我的 bash 文件:
- me=$(date +%Y-%m-%d)
mkdir -p /home/importRequirement"$foldername"
{
java -jar ImportRequirement1.jar
java -jar ImportRequirement1.jar
}
2>importRequirement"$foldername"/log$(date +%Y-%m-%d-%H-%M-%S).txt
我已经删除了网址。
当脚本打算从非交互式环境(cron 或 init)启动时,不会设置任何常用的好东西,例如自定义路径或其他环境变量。
规则是:
- 确保所有命令(最多/bin 和/usr/bin 中的命令除外)使用完整路径
- 确保设置了所有必需的环境变量
如果以这种方式使用许多脚本,则可以构建一个 setenv 脚本来声明所有环境变量,并为使用的每个命令创建一个变量。在这里它将包含(或多或少):
export JAVAHOME=...
export JAVA=/path/to/java
然后,您可以在脚本中使用:
$(JAVA) -jar ImportRequirement1.jar
但在这里,您应该对预期目录有先前cd
或使用 jar 的绝对路径
cron 作业的环境变量与用户登录时获得的环境变量不同。仔细检查运行脚本所需的环境变量(即 JAVA_HOME 和 PATH)。cron 可能不知道用什么来解释你的脚本,你可能想放置
#!/bin/bash
在 bash 脚本的第一行。