热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[linux]crontab命令执行问题

在服务器上设置了一个R脚本的crontab任务,死活不执行。在网上搜了很久,终于解决了。这里主要说一下crontab异常时,该如何排查。假设cron命令为:****Rscriptyour_

在服务器上设置了一个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  虽然我依然没看懂,呵呵。


推荐阅读
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • Linux环境下MySQL的安装与配置
    本文详细介绍了在Linux系统上安装和配置MySQL的步骤,包括安装前的准备工作、下载和解压安装包、初始化数据库、配置文件编辑、启动服务以及设置开机自启动等。 ... [详细]
  • 前言crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较 ... [详细]
  •   crontab命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执 ... [详细]
  • 一,crontab服务的简介二、安装cron服务安装cron服务:--yuminstallvixie-cron--yuminstallc ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • Linux下浅谈crond与crontab的命令用法
    一、什么是crond?crond是Linux系统用来定期执行命令或指定程序的服务的一种服务或软件。一般情况下当我们安装完成Linux操作系统之后,默认便会启动 ... [详细]
  • 用.sh文件来完成任务,但现在有个项目直接用url就行。一般系统不会有crontabShell#安装crontab:yuminstallcronta ... [详细]
  • Linux下怎么使用crontab命令
    本篇内容主要讲解“Linux下怎么使用crontab命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Li ... [详细]
  • 第一种,通过mancrontab查看crontab的帮助手册第二种列出几个简单示例Crontab命令的格式为:crontab–l|-r|-e|-i[username]-l显示用户的 ... [详细]
  • 1crond服务未启动crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它 ... [详细]
  • 关于定时执行一个PHP文件办法,该如何解决
    后端开发|php教程crontab,windows,PHP,schedule,7302763后端开发-php教程关于定时执行一个PHP文件的方法简搜源码,ubuntu找不到域名,启 ... [详细]
  • 这篇文章将为大家详细讲解有关如何解析crontabphp自动运行,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。cront ... [详细]
  • 使用linux命令crontab间隔时间执行其它命令-1.1etccrontab文件在etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的 ... [详细]
author-avatar
皆靖所能
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有