相关内容原文地址:

CSDN:Trigl:使用Crontab定时执行Spark任务

思否:浩Coding:Linux命令之Crontab——定时任务



一、Linux命令之Crontab定时任务

crontab命令被用来提交和管理用户的需要周期性执行的任务,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command 顺序:分 时 日 月 周
  1. minute: 表示分钟,可以是从0到59之间的任何整数。
  2. hour:表示小时,可以是从0到23之间的任何整数。
  3. day:表示日期,可以是从1到31之间的任何整数。
  4. month:表示月份,可以是从1到12之间的任何整数。
  5. week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  6. command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

1.1 常见Crontab任务

1.1.1 安装crontab

yum install`crontabs`

1.1.2 查看定时任务列表

crontab-l

1.1.3 编辑定时任务

crontab –e【等同于: `vim` `/var/spool/cron/root`】

1.1.4 删除定时任务

`crontab``–r`

1.1.5 备份定时任务

`crontab` ` -l > $HOME/backMyCrontab `

crontab服务操作说明:

  • service crond start //启动服务
  • service crond stop //关闭服务
  • service crond restart //重启服务
  • service crond reload //重新载入配置
  • service crond status//查看crontab服务状态

1.2 Crontab命令​执行时间的网站

https://tool.lu/crontab/

1.3 crontabl实例

每隔2分钟输出当前时间到文件

*/2 * * * * echo $(date) >> /test/date.log

每周一的凌晨4点备份Crontab到指定目录的以当前日期命名的文件

0 4 * * 1 crontab -l > /backup/backMyCrontab/backMyCrontab-$(date +%Y-%m-%d).log

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup

0 6-12/3 * 12 * /usr/bin/backup

每天3-5,17-20每隔30分钟同步一次互联网时间,并且不输出日志到crontab将结果输出到log

echo "*/30 [3-5],[17-20] * * * /usr/bin/ntpstat time.windows.com >/dev/null 2>&1" >> /var/cron.log

每隔两天的上午8点到11点的第3和第15分钟执行command

3,15 8-11 */2 * * command

每个星期一的上午8点到11点的第3和第15分钟执行command

3,15 8-11 * * 1 command

每周六、周日的1:10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。

00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;

每小时执行/etc/cron.hourly目录内的脚本

01 * * * * root run-parts /etc/cron.hourly

1.4 注意:

如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个 定时重启系统的任务也是无效的。

新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。

当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’。

二、在Java程序中调用Linux命令

主要用到两个类Process和Runtime,代码示例如下:

    Runtime rt = Runtime.getRuntime();
String[] cmd = { "/bin/sh", "-c", "cd ~" };
Process proc = rt.exec(cmd);
proc.waitFor();
proc.destroy();

三、每天0点30分执行Spark任务

编写执行Spark任务的Perl脚本:getappinfo.pl:

#!/usr/bin/perl

use strict;

# 获取上一天的日期
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 3600 * 24);
# $year是从1900开始计数的,所以$year需要加上1900;
$year += 1900;
# $mon是从0开始计数的,所以$mon需要加上1;
$mon += 1; print "$year-$mon-$mday-$hour-$min-$sec, wday: $wday, yday: $yday, isdst: $isdst\n"; sub exec_spark
{
my $dst_date = sprintf("%d%02d%02d", $year, $mon, $mday);
my $spark_generateapp = "nohup /data/install/spark-2.0.0-bin-hadoop2.7/bin/spark-submit --master spark://hxf:7077 --executor-memory 30G --executor-cores 24 --conf spark.default.parallelism=300 --class com.analysis.main.GenAppInfo /home/hadoop/jar/analysis.jar $dst_date > /home/hadoop/logs/genAppInfo.log &";
print "$spark_generateapp\n"; return system($spark_generateapp);
} if (!exec_spark())
{
print "done\n";
exit(0);
}
  1. 添加定时器任务:每天的0点30分执行getappinfo.pl
crontab -e

添加以下内容:

30 0 * * * /data/tools/getappinfo.pl
  1. 脚本中的Spark程序如下:
package com.analysis.main

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession object TestCrontab { // args -> 20170101
def main(args: Array[String]) { if (args.length == 0) {
System.err.println("参数异常")
System.exit(1)
} val year = args(0).substring(0, 4)
val month = args(0).substring(4, 6)
val day = args(0).substring(6, 8) //设置序列化器为KryoSerializer,也可以在配置文件中进行配置
System.setProperty("spark.serializer", "org.apache.spark.serializer.KryoSerializer") // 设置应用名称,新建Spark环境
val sparkConf = new SparkConf().setAppName("GenerateAppInfo_" + args(0))
val spark = SparkSession
.builder()
.config(sparkConf)
.enableHiveSupport()
.getOrCreate()
println("Start " + "GenerateAppInfo_" + args(0)) import spark.sql sql("use arrival")
val sqlStr = "select opttime, firstimei, secondimei, thirdimei, applist, year, month, day from base_arrival where year=" + year + " and month=" + month + " and day=" + day
sql(sqlStr).show() // 跑GenAppInfoNew
val rt = Runtime.getRuntime()
val cmd = Array("/bin/sh", "-c", "/data/tools/getappinfo_new.pl")
try {
val proc = rt.exec(cmd)
proc.waitFor()
proc.destroy()
println("执行提取appinfo_new任务")
} catch {
case e: Exception => println("执行提取appinfo_new任务失败:" + e.getMessage())
}
} }

Linux命令之Crontab定时任务,利用Crontab定时执行spark任务的更多相关文章

  1. 每天一个linux命令(50):crontab命令

    前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...

  2. (转)每天一个linux命令(50):crontab命令

    场景:在学习Linux环境下自动部署项目时候,可以通过crontab命令设定定时任务,实现服务端项目的自动部署! 前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系 ...

  3. 每天一个linux命令(42):crontab命令

    前 一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的. Linux 系统上面原本就有非常多的计划性工作,因此 ...

  4. 【转】每天一个linux命令(50):crontab命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html 前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划 ...

  5. crontab,定时任务执行找不到库or shell可执行,crontab 定时任务下就不能执行,tensorflow,ImportError: libcuda.so.1: cannot open shared object file: No such file or directory

    在线上启动一个定时任务,但是起来查看,发现任务执行找不到库,报cuda错误: ImportError: libcuda.so.1: cannot open shared object file: No ...

  6. Linux crontab 定时任务

    http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html 19. crontab 定时任务 通过crontab 命令,我们 ...

  7. Linux下实现秒级的crontab定时任务

    crontab的格式如下 * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 ...

  8. 【linux】Crontab 定时任务 使用实例

    1 使用putty 登录linux 服务器 2 输入以下命令.查看已有的定时任务 crontab -l 3 输入  以下命令,进入定时任务文件 crontab -e 4  键盘 选择 i  键 进行输 ...

  9. Linux命令集锦:crontab命令

    Linux crontab是用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此任务调度命令.crontab命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作. 而 ...

随机推荐

  1. Spring 之AOP AspectJ切入点语法详解

    记录一下,以后学习 https://blog.csdn.net/zhengchao1991/article/details/53391244

  2. Java学习日报 9.29

    package random;import java.util.*;import java.math.*;public class Com { public static void main(Stri ...

  3. nginx二级域名配置[CentOS]

    目录 背景 域名配置 服务器配置 Nginx配置 页面访问生效 背景 只有一台云服务器,部署了自己写的后端管理系统,又需要部署下自己的个人博客平台,但是只有一个域名,想要合理的利用下二级域名. 域名配 ...

  4. 效率工具 | 快速创建虚拟机,Vagrant真香!

    Vagrant 是一个基于Ruby的工具,主要用于创建和部署虚拟化开发环境.它以来于Oracle的开源VirtualBox虚拟化系统,通过使用 Chef创建自动化虚拟环境. Vagrant 主要的功能 ...

  5. ES6参数默认值,剩余参数及展开数组

    一.函数的参数默认值 在ES6之前,想要给参数设置默认值得话,只能在函数体内部加判断设置,比如如果传递参数为undefined时为true, 否则为false,如下图example1,ES6出现语法可 ...

  6. Modbus 仿真测试工具 Mod_Rssim 详细图文教程

    Mod_RSsim是一款轻量级的Modbus从机模拟器,它可以模拟ModBusTCP和ModBusRTU的从机,能够同时模拟254个被控站,软件使用简单方便,可以满足一般的主机调试. 官方网站:www ...

  7. Dubbo 就是靠它崭露头角!(身为开源框架很重要的一点)

    Hola,我是 yes. 经过了 RPC 核心和 Dubbo 微内核两篇文章后,今天终于要稍稍深入一波 Dubbo 了. 作为一个通用的 RPC 框架,性能是很重要的一环,而易用性和扩展性也极为重要. ...

  8. maven打包时排除配置文件

    上网查了一下,直接在pom里面配置就好了,具体写法如下所示 <build> ... <resources> <resource> <directory> ...

  9. LeetCode116 每个节点的右向指针

    给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...

  10. 容器编排系统K8s之APIService资源

    前文我们聊到了k8s上crd资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14267400.html:今天我们来了解下k8s的第二种扩展 ...