0

我无法在不同的用户下运行 crontab 作业。(例如 sudo -u someuser crontab -e)它在我的用户配置文件下运行得非常好。我知道是什么问题,但找不到解决方案。问题是,当我为其他用户配置此 crontab 作业时,crontab 无法找到 java,因此即使是简单的 java -version 也无法正常工作。

下面是我的脚本。

#!/bin/bash

export JAVA_HOME=/usr/jdk/jdk1.6.0_31
export PATH=/usr/local/bin:/bin:/usr/bin:/opt/dell/srvadmin/bin:/home/VishalS/bin

echo "JAVA_HOME is: " $JAVA_HOME >>  log.out
echo "PATH is: " $PATH >>  log.out

which java >> log.out

/usr/bin/java -version >> log.out
/usr/jdk/jdk1.6.0_31/bin/java -version >> log.out

上述脚本的输出:

JAVA_HOME is:  /usr/jdk/jdk1.6.0_31
PATH is:  /usr/local/bin:/bin:/usr/bin:/opt/dell/srvadmin/bin:/home/VishalS/bin
/usr/bin/java

很明显,以下几行不起作用。

/usr/bin/java -version >> log.out
/usr/jdk/jdk1.6.0_31/bin/java -version >> log.out

有人可以在这里帮助我吗?我不明白为什么即使在设置 jdk 路径 crontab 后也不执行 java -version ?

4

4 回答 4

1

尝试直接在其他用户 crontab 中设置路径。请参阅“人 5 crontab”。

于 2013-10-09T02:29:09.070 回答
0

Crontab(5) 在没有 ENV 的情况下运行,因此您需要获取一个环境(您正在构建 JAVA_HOME 和 PATH,但 crontab (几乎)没有给您任何东西。请注意“which java”的输出没有出现在您的日志文件中。

  • 构建一个环境脚本,您可以为您的 crontab 脚本提供源代码,“.path/to/env.sh”
  • 将完整路径放在 shell 脚本等中执行的所有程序上。你不能依赖 cron 中的环境
  • 运行“which which”,你得到 /usr/bin/which 了吗?然后把它放在你的脚本中。
  • 为方便起见,我们经常省略脚本中的路径,但在从 crontab 运行的脚本中给出路径

  • 以其他用户身份登录时java会运行吗?

于 2013-10-09T02:43:57.963 回答
0

我唯一想到的是,该java命令可能对您尝试执行它的用户没有可执行权限。

所以使用chmod来赋予必要的执行权限。

于 2013-10-09T02:21:46.113 回答
0

感谢大家的有益评论。然而,在我的情况下,实际修复是混合步骤,如下所述:- 1. 在 root 的用户配置文件下设置 Sun JDK 路径。(早期打开 jdk 已设置) 2. 授予正在写入日志的日志文件夹的权限.(之前的权限设置不正确) 3. 调整了我的 cronjob(我认为那里有一个额外的空间)

于 2013-10-11T14:45:18.147 回答