zoukankan      html  css  js  c++  java
  • [linux]crontab 命令执行问题

    在服务器上设置了一个R脚本的crontab任务,死活不执行。在网上搜了很久,终于解决了。

    这里主要说一下crontab异常时,该如何排查。

    假设cron命令为:* * * * Rscript /your_path/hello_world.r >> /your_path/hello_world.log

    1.首先检查cron命令是否完全正确。

    虽然很简单,但是我还是在这吃了不少苦。

    具体症状主要表现为cron不执行,并且crontab执行日志下找不到执行记录。

    contab的执行日志在/var/log/cron.log中(Ubunutu),vi之后使用nG跳到最后一行,可以看到最新的执行记录。

    如果没有看到cron命令,则很可能是命令或者命令路径不正确。仔细检查一下。

    注:No MTA installed, discarding output 这个信息,讲道理与执行脚本与否无关。可以不必理会。

    (crontab执行脚本时是不会直接错误的信息输出,而是会以邮件的形式发送到你的邮箱里,这时候就需要邮件服务器了,如果你没有安装邮件服务器,它就会报这个错)

    2.crontab环境配置问题

    如果手动在shell中可以执行,但是在crontab中无法执行时,就应该考虑这个问题了。

    这个时候在cron日志中可以看到cron命令的执行记录,但是脚本就是死活不执行。hello_world.log下什么信息都没有。

    搜到很多内容,说是环境配置的问题(确实也应该是环境配置的问题)。简单的说就是crontab执行时的环境和我们自己在shell中执行时的环境是不一致的。

    更详细的内容可以参考这里:http://blog.csdn.net/zc02051126/article/details/20480289

    虽然链接里说了很多解决方案,但是我并不知道他在说什么,呵呵。

    我直接指定了命令的绝对路径,将cron命令改为:* * * * /usr/local/bin/Rscript /your_path/hello_world.r >> /your_path/hello_world.log

    再次编辑crontab,终于在hello_world.log中找到了输出信息。

     

    * 绝对路径根据自己安装程序位置的不同而不同。常见的有/usr/bin,/usr/local/bin等。如果不确定,就自己去路径下ls看是否存在相应程序。

    * 网上很多说在脚本中首行加上环境路径(如#!/usr/bin/env Rscripit)。但是我没成功,不知道为什么。 

    3.脚本路径的问题

      问题为手动运行脚本正常, 但是通过crontab自动运行则不成功。查看crontab的log发现在指定时间运行了任务,只是看不到结果。

      刚开始以为是权限或者环境的问题,但细想又想不通。

      事实上当crontab的log显示cron任务执行,但没有结果输出的时候,应该开始怀疑本身脚本的问题了。

      以我的例子来说,debug之后发现是脚本含文件路径,并且使用的相对路径。因为crontab环境和手动运行脚本时的环境不同,导致文件路径无效,进而脚本无效,于是crontab没有结果。将脚本中的相对路径改成绝对路径之后,crontab的结果就正常了。

    Crontab命令指南,可以参考:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html  虽然我依然没看懂,呵呵。

  • 相关阅读:
    常用的 JavaScript 简写方法
    user-select详解
    惊人的CSS和JavaScript动画logos例子
    debounce与throttle区别
    Vue.js中data,props和computed数据
    字体图标出现乱码的兼容方案
    ios调用Html内JS alert 不能点击关闭为甚?
    统一诊断服务 (Unified diagnostic services , UDS) (二)
    统一诊断服务 (Unified diagnostic services , UDS) (一)
    CAN总线同步
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/5407342.html
Copyright © 2011-2022 走看看