Linux执行Cron Job失败,在Shell sh下执行却能成功 - 环境变量?

博客分类:

linuxcrontabpermissionetc/profile环境变量

一、我们常常碰到在shell下执行某个命令能够成功,比如执行一个java程序:

java -jar /home/opscoder/topo-audit.jar,但是在crontab下执行会失败。

cornjob为 0 10 * * * java -jar /home/opscoder/topo-audit.jar: 即每天10点去执行这个jar中的main方法

二、查找失败的原因,即查看crotab的执行log, 有如下3种方法,我所用的是ubantu的机器,使用的是方法1、mail任务(Linux UNIX)在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。

2、针对UINX系统查询方法(AIX、HP-UX)

在 /var/spool/cron/tmp文件中,有croutXXX00999的tmp文件,tail 这些文件就可以看到正在执行的任务了。

3、针对Linux系统的查询方法(含Redhat、SUSE)

看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察

配图为系统aix root用户默认的crontab

三、针对我的情况,从log中可以看出是/bin/sh: java command not found

这就说明了cron使用的环境变量不是系统的环境变量,而是自己的环境变量,说白了,就是crontab不能读取到/etc/profile下的信息。

四、解决方法:

1、修改crontab来调用一个脚本,而不是直接执行这个jar

即将:cornjob为 0 10 * * * java -jar /home/opscoder/topo-audit.jar

修改为:0 10 * * * /home/opscoder/topo-check.sh

2、创建topo-check.sh

touchtopo-check.sh   #创建topo-check.sh文件
vi topo-check.sh         #编辑topo-check.sh文件,并输入如下内容

#!/bin/bash
source /etc/profile
java -jar /home/opscoder/topo-audit.jar

保存退出。
chmod +x topo-check.sh    #给topo-check.sh可执行权限

这样就大功告成了,需要注意的是需要加上#!/bin/bash,不然crontab可能还是不能执行成功,使用如上的3中方法之一来查看crontab的log,你会发现类似: /bin/sh command /home/opscoder/topo-check.sh not found

附:如果当前用户不能启动crontab,可以使用具有sudo权限或者具有启动权限(service)的用户先启动crontab(service cron status, service cron start, service cron start),然后再切回该用户创建或者cron job(crontab -e)

时间: 2024-10-25 18:19:12

Linux执行Cron Job失败,在Shell sh下执行却能成功 - 环境变量?的相关文章

linux下查看和添加PATH环境变量

linux下查看和添加PATH环境变量 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 编辑你的 PATH 声明,其格式为: PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N> 你可以自己加上指定的路径,中间用冒号隔开.环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:$ sourc

Linux环境下安装JDK并配置环境变量

首先查看是否已经安装了JDK并配置环境变量. [[email protected]_plat opt]# java -version -bash: java: command not found [[email protected]_plat opt]# 说明没有安装JDK或者配置环境变量. 安装JDK: Linux环境JDK安装比较简单,直接解压到指定目录即可. 1.上传安装介质至服务器,我下载的是tar.gz版本的JDK: 2.在上传目录中执行tar命令安装: tar -zxvf jdk-7

windows+linux下jdk安装及java环境变量配置

对于初学java的用户来说,可能第一件要做的事情就是安装jdk及配置环境,以下内容主要讲述windows及linux下jdk的安装以及环境变量的配置. 1.首先下载相应平台可用版本jdk安装文件,可以在oracle官网上下载windows.mac或者linux版本: 也可以到我的百度网盘下载:windows版本(jdk-8u20-windows-x64.exe).Linux版本(jdk-8u20-linux-x64.tar.gz) 2.下载之后,直接安装到电脑相应目录,windows直接双击按照

Linux 下三种方式设置环境变量

1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错误. 2.那么什么是环境变量?简单说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件. 设置变量对于一般人最实用的功能就是: 不用拷贝某些dll文件到系统目录中了,而path 这一系统变量就是系统搜索dll文件的一系列路径 在Linux系统下,如果你下载并安装应用程序,很有可能在键入它的名称的时候出现

shell脚本程序中的部分常用环境变量和参数变量的说明以及简单shell脚本示例

环境变量 $HOME 当前用户的家目录 $PATH 以冒号分隔的用来搜索命令的目录列表 $PS1 命令提示符,通常是$字符,但在bash中,可以使用一些更复杂的值.例如,字符串[\[email protected]\h\w]$就是一个流行的默认值,它给出用户名/机器名和当前的目录名,当然也包括一个$提示符. $PS2 二级提示符,用来表示后续的输入,通常是 > 字符. $IFS 输入域分隔符.当shell读取输入时,它给出用来分隔单词的一组字符,他们通常是空格,制表符和换行符. $0 shell

在linux环境下安装JDK并配置环境变量

操作步骤如下 1.根据linux服务器的系统版本在官网下载相应linux版本JDK(32位下载x86,64位下载x64) 2.通过远程连接工具(filezilla)将下载好的JDK上传至linux服务器某个目录下 3.使用tar命令将jdk解压至当前目录 4.配置jdk环境变量 修改/etc目录下的profile文件,在文件最后增加JAVA_HOME,JRE_HOME,PATH等环境变量 5.配置好环境变量后,用source命令使配置文件生效 source profile 6.测试JDK是否安装

Linux下安装JDK并配置环境变量

检查jdk版本.卸载openjdk版本(jdk与openjdk的区别不在此赘述) 先检查java –version.javac –version命令查看版本(如图一) 经检查jdk版本为1.7.0.45:再输入rpm -qa|grep java查看(如图二) 注:不同的CentOS版本安装的openjdk版本可能有差别:如果没有列表显示,可直接看第4步 卸载以上三个文件(需要root权限,登录root权限卸载)(如图三) rpm -e --nodeps java-1.7.0-openjdk-1.

Linux下安装Python,以及环境变量的配置

1.安装环境   centos7 + vmware + xshell 2.安装Python3 2.1下载Python资源包 网址:https://www.python.org/downloads/release/python-362/ 下载地址:https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz 3.安装步骤 1.先切换到opt目录下   cd /opt 2.使用wget来安装,如果没有安装wget的话,先安装  yum  insta

linux下安装软件后的环境变量设置

/home/username/.bashrc文件中加入如下内容 export LM_LICENSE_FILE=/home/program_files/modeltech_10.2c/modeltech/LICENSE.datexport PATH=$PATH:/home/program_files/modeltech_10.2c/modeltech/linux:/home/program_files/xilinx/Vivado/2015.4/bin && /home/username/.b