zoukankan      html  css  js  c++  java
  • Linux执行Cron Job失败,在Shell sh下执行却能成功

    一、我们常常碰到在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)

  • 相关阅读:
    iOS 笔记-AFN使用中的遇到的问题
    iOS 笔记-incompatible pointer types initializing 'NSMutableString *' with an expression of type 'NSString *'警告处理
    iOS 笔记-SRT视频字幕的解析与同步
    iOS-笔记 字符编码
    iOS-笔记 设置导航栏的样式
    iOS 笔记-自定义的导航栏按钮
    iOS 笔记-删除插件的方法
    iOS 笔记-关于用户交互的那些事
    iOS BUG整理--[__NSCFNumber length]: unrecognized selector sent to instance 崩溃解决
    iOS BUG整理-Data argument not used by format string的警告处理
  • 原文地址:https://www.cnblogs.com/SZLLQ2000/p/4863662.html
Copyright © 2011-2022 走看看