Linux中crontab定时任务不执行的原因

最近在linux中遇到了个crontab定时任务不执行的case,在这给大家分享一下,避免踩到我遇到的坑。

先贴脚本吧

为了方便展示,把脚本入参,都写死了

#!/usr/bin/env bash
# 1输出文件,到log 例如: bg
# 2 目标文件目录  不带最后的/ 例如:/opt/flume/home/hdp_lbg_ectech/rawdata/xxx/web_vip_bg
# 3 执行的时候选择前几天的日志 例如:1

LAST_DAY=$(date +"%Y-%m-%d" -d "1 days ago")
LAST_HOUR_DAY=$(date +"%Y%m%d" -d "1 days ago")
#执行jar获取bg日志
 java -jar /opt/script/xxx/vipbg/vip-bg-job-1.0-SNAPSHOT-shaded.jar /opt/script/xxx/vipbg/bg.log

#具体到文件名
SRC_FILE=/opt/script/xxx/vipbg/bg.log

#指定目标目录,按日期创建目录
DEST_DIR_NAME=/opt/flume/home/hdp_lbg_ectech/rawdata/xxx/web_vip_bg/$LAST_HOUR_DAY
DEST_FILE_NAME=$(basename $SRC_FILE)
#FLUME会忽略隐藏文件,所以可直接拷贝过去
TMP_FILE=$DEST_DIR_NAME/.$DEST_FILE_NAME
DEST_FILE=$DEST_DIR_NAME/$DEST_FILE_NAME.$SRC_IP
#判断源文件是否非空,空文件Flume会直接删除的,且目标文件不存在,避免重复拷贝数据
if [ -s "$SRC_FILE" ] && [ ! -f "$DEST_FILE" ];then
  #使Flume具有删除该目录下文件的权限,不然FLUME收集不上去
  mkdir -p $DEST_DIR_NAME && chmod 777 $DEST_DIR_NAME
  #必须先cp到一个临时文件再mv过去,直接cp过去会造成数据丢失
  cp $SRC_FILE $TMP_FILE && mv $TMP_FILE $DEST_FILE
fi
#删除tmp中转文件
rm -rf /opt/script/xxx/vipbg/bg.log
echo "删除源文件成功"

有些目录用了xxx代表

这个脚本单独考出来可以执行,放到crontab里面就不执行了, 百度了下,大多都说需要使用绝对路径,看了下我们的脚本,就是下面这句有问题:

代码如下:

java -jar /opt/script/xxx/vipbg/vip-bg-job-1.0-SNAPSHOT-shaded.jar  /opt/script/xxx/vipbg/bg.log

初步判断是java这需要使用jdk的目录路径,做了两个实验测试了下。

crontab中加上一个 java -jar xxxx.jar的定时任务

代码如下:

代码如下:

10 16 * * *  java -jar /opt/script/xxx/vipbg/vip-bg-job-1.0-SNAPSHOT-shaded.jar  /opt/script/xxx/vipbg/bg.log

果然,这个没有执行

crontab中加上一个 jdk目录/bin/java -jar xxxx.jar的定时任务

代码如下:

代码如下:

20 16 * * *  /opt/soft/jdk/jdk1.6.0_45/bin/java -jar /opt/script/xxx/vipbg/vip-bg-job-1.0-SNAPSHOT-shaded.jar  /opt/script/xxx/vipbg/bg.log

这次执行了,没有执行的原因就是执行jar的时候,需要加上jdk的路径

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Linux crontab定时任务配置方法(详解)
  • linux下使用crontab实现定时PHP计划任务失败的原因分析
  • 浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别
  • 详细介绍Linux的定时任务crontab
  • linux下定时执行任务的方法及crontab 用法说明(收集整理)
  • Linux定时任务Crontab详解(推荐)
  • 详解linux下利用crontab创建定时任务
  • Linux中使用crontab命令启用自定义定时任务实例
  • 利用Linux中的crontab实现分布式项目定时任务功能
(0)

相关推荐

  • 详细介绍Linux的定时任务crontab

    一.前言 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中(/var/spool/cron/以用户命名的文件),以供之后读取和执行.该词来源于希腊语 chronos(χρνο),原意是时间. 通常,crontab储存的指令被守护进程 - crond激活在后台运行,每一分钟检查是否有预定的作业需要执行.这类作业一般称为cron jobs. 二.启动crond进程 service cr

  • Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行.cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业.crontab命令允许用户提交.编辑或删除相应的作业.每一个用户都可以有一个crontab文件来保存调度信息.系统管理员可以通过cron.deny 和 cron

  • 利用Linux中的crontab实现分布式项目定时任务功能

    认识crond服务 1.crond是Linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作.而Linux任务调度的工作主要分为以下两类: ①系统执行的工作:系统周期性所要执行的工作,如备份系统数据.清理缓存 ②个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置 2.Crontab是UNIX系统下的定时任务触发器,其使用者

  • Linux定时任务Crontab详解(推荐)

    今天做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置.Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,设置比Windows稍微复杂一些(因为没有图形界面嘛),但是也不是非常复杂,基本上用过一遍就能记住了,关键是要记住/var/spool/cron这个目录.下面看一下具体的用法: 首先查看一下/etc/crontab文件: $ cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/us

  • linux下使用crontab实现定时PHP计划任务失败的原因分析

    很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本文就linux下使用crontab实现定时PHP计划任务失败的原因做一分析. 一般我们linux定时执行php代码例如: */5 * * * * /usr/local/php/bin/php /home/wwwroot/1.php 其实这样是可以执行php代码的. 但是为什么很多朋友在1.php写的生成一个缓存文件没有生成呢? 这个要涉及到crontab执行php的相对路径问题. 注意在执行文件中,有包含文件

  • linux下定时执行任务的方法及crontab 用法说明(收集整理)

    linux下定时执行任务的方法 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为"crontab",是"cron table"的简写. 一.cron在3个地方查找配置文件: 1./var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的cron

  • Linux中使用crontab命令启用自定义定时任务实例

    Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,设置比Windows稍微复杂一些(因为没有图形界面嘛),但是也不是非常复杂,有需要的朋友可以了解一下. 一 简介 Linux下的任务调度分为两类,系统任务调度和用户任务调度 系统任务调度:系统需要定期执行的任务,比如重启.日志清理等,其配置文件是:/etc/crontab 用户任务调度:某个用户需要定期执行的任务.用户可以使用 crontab 命令来配置自己的定时任务.所有用户配置的定时任务都存放在 /var/spool/c

  • 浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别

    Linux配置定时任务,大家都知道使用crontab这个系统功能,但有时候我们需要区分用户执行,下面就直接说一下2种方法的区别: 方法1: 使用命令 crontab -e 然后直接编辑定时脚本. 这样执行以后,属于用户自定义的,会被写到 /var/spool/cron 目录下,生成一个和用户名一致的文件,文件内容就是我们编辑的定时脚本. 如: [root@localhost cron.d]# cd /var/spool/cron [root@localhost cron]# ll 总用量 4 -

  • 详解linux下利用crontab创建定时任务

    Linux下可以利用crontab创建定时任务. 常用搭配 crontab -e 编辑任务 crontab -l 查看所有任务[该用户] crontab -r 取消所有任务[该用户] 任务格式 × × × × × +命令(具体任务) 前5个参数表示时间,依次为: 参数 范围 分钟 0-59 小时 0-23 日期 1-31 月份 1-12 星期 0-6(0代表星期日) 特殊符号 为了精确表示定时,需要一些特殊符号来描述具体的任务执行时间.有以下几个符号: "/" 代表每,每隔多长时间 &

  • Linux中crontab定时任务不执行的原因

    最近在linux中遇到了个crontab定时任务不执行的case,在这给大家分享一下,避免踩到我遇到的坑. 先贴脚本吧 为了方便展示,把脚本入参,都写死了 #!/usr/bin/env bash # 1输出文件,到log 例如: bg # 2 目标文件目录 不带最后的/ 例如:/opt/flume/home/hdp_lbg_ectech/rawdata/xxx/web_vip_bg # 3 执行的时候选择前几天的日志 例如:1 LAST_DAY=$(date +"%Y-%m-%d" -

  • crontab定时任务不执行的原因分析与解决方法

    前言 实现Linux定时任务有:cron.anacron.at等,cron是服务名称,crond是后台进程,crontab则是定制好的计划任务表 然而今天真是长知识 用了 crontab 这么久 才知道原来也需要 启动 添加了定时任务 但是并不好使 [root@dev-gl-lh1 ApiAgent]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For deta

  • 浅析Linux中crontab任务调度

    一.创建调度任务 指令 crontab -e 进入当前用户编辑界面 crontab -u 用户名 -e 进入指定用户编辑界面 进入crontab任务编辑界面 任务编写格式 #每分钟执行查看一次/ect目录,把目录内容写进/tml/a.txt下 */ 1 * * * * ll /etc >> /tmp/a.text #crontab对象 +指令 #多个任务同时执行 #crontab对象  指令1&指令2 crontab对象参数 第一个* 表示分钟 范围0-59 第二个* 表示小时 范围:

  • 浅谈spring-boot的单元测试中,@Before不被执行的原因

    我们先来看下笔者的单元测试的依赖版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from reposi

  • crontab定时任务不执行的一些原因总结

    前言 最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这5个原因: 1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止.如果停止了就无法执行任何定时任务了,解决的方法是打开它: crond 或 service crond start 如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装: yum -y install crontabs 2 权

  • Linux中crontab输出重定向不生效问题的解决方法

    问题 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为"crontab",是"cron table"的简写. 近期在crontab中添加了一个定时任务,该任务执行之后默认会有正常输出.为了确保在任务执行过程中的异常信息也可以捕获,方便问题定位,因此在crontab中我写了这么一条命令: 01 09 * * * cd /o

  • linux使用crontab实现PHP执行计划定时任务

    首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务.所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行.要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令来编辑该用户的 crontab.该文件使用的格式和 /etc/crontab 相同.当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名

  • 使用linux命令crontab间隔时间执行其它命令

    1.1 /etc/crontab 文件 在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序.每个用户可以建立自己的调度crontab. 如: 复制代码 代码如下: [root@dave ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly

  • 详解django中使用定时任务的方法

    今天介绍在django中使用定时任务的两种方式. 方式一: APScheduler 1)安装: pip install apscheduler 2)使用: from apscheduler.scheduler import Scheduler from django.core.cache import cache # 实例化 sched = Scheduler() # 每30秒执行一次 @sched.interval_schedule(seconds=30) def sched_test():

  • Linux中文件权限目录权限的意义及权限对文件目录的意义

    linux中目录与文件权限的意义 一.文件权限的意义 r:可以读这个文件的具体内容: w:可以编辑这个文件的内容,包括增加删除文件的具体内容: x:文件就具有了可执行的权限-------注意:这里和window不一样,在win中,文件的可执行权限是通过扩展名表现出来的,如exe.bat等,但是在linux中文件的可执行权限是通过这个x决定的,与文件名没有什么关系. 二.目录权限的意义 r:可以查看此目录下的完整文件列表信息. w:可以对此目录下的所有的文件及目录进行相关的更改,也就是可以更改这个

随机推荐