开发者社区 问答 正文

shell脚本执行java命令无法找到?报错

我是root用户登录,并且/etc/profile也设置了环境变量,系统是ubuntu

我的crontab内容:crontab -l

*/1 * * * * sh /opt/vcm/monitor.sh >> /opt/cronlog 2>&1

我的shell脚本内容:monitor.sh

#!/bin/sh
#monitor java&nginx
basepath=$(cd `dirname $0`; pwd)
echo "$(date) run monitor" >> $basepath/run_monitor.log
j=$(netstat -anp|grep :8444|grep java)
if [ -z "$j" ]; then
        echo "$(date) restart vcm" >> $basepath/monitor.log
        java -jar ./vcm.jar
fi

cronlog日志报错:

8:/opt/vcm/monitor.sh: java: not found

展开
收起
爱吃鱼的程序员 2020-06-08 11:38:33 2114 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    crontab不会读取系统的环境变量,解决方法有两种:

    1.crontab改成*/1****source~/.bash_profile&& sh/opt/vcm/monitor.sh>>/opt/cronlog2>&1

    2.脚本里面加上:.~/.bash_profile

    改绝对路径试试

    你先别执行脚本, 看java-version能出来不,出不来就是你环境变量有问题

    crontab的`PATH`变量非常有限,如果你的java并不是在`/usr/bin/java`下,那你需要在脚本中自己把环境变量改了,或者用绝对路径去执行

    你是指java命令用绝对路径吗最好的解决办法是通过apt安装JDK,不会有这问题,你搜一下“安装Ubuntu后要做的事”,里面有提到怎么通过apt安装JDK

    在全局配置文件里面配置java的全局变量即可

    2020-06-08 11:38:50
    赞同 展开评论