一、Crond 是什么?(概述)

crontab 是一款linux系统中的定时任务软件用于实现无人值守或后台定期执行及循环执行任务的脚本程序,在企业中使用的非常广泛.

    现在开始学习linux计划任务程序吧。

crontab的优势: 可以实现24小时或定期执行任务,非常高效实用,几乎是每个企业都会用到的服务,同时


crond服务是运行的程序,而crontab命令是用户用来设置定时规则的命令。(crontab -e 新建一个计划任务)

      #注: http://blog.csdn.net/a347911/article/details/72875763 ##crontab实现分布式定时任务项目方案(博文)

      #注: http://blog.51cto.com/hongtengfei/1683153 #Crond定时任务详细分析 (博文)

      #注: http://blog.51cto.com/oldboy/1410555 #定时任务那些事


      #http://blog.sina.com.cn/s/blog_506ed9e6010106kj.html 命令passwd报错因inode节点处理记录 修改密码报错 inode节点满导致密码无法修改


       $###### 定时任务中的 % 需要转义,而脚本中的 % 则无需转义 ##########$

       脚本命令最好要全路径 或增加 命令解释器,下面是命令解释器增加方法

#----->$$最好在脚本中重新定义如:

           #!/bin/bash,/bin/sh

           export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

           ------------>>>脚本内容<<----------------------------------------------------------


JAVA程序无法执行,JAVA程序脚本环境变量定义:


JAVA_HOME="/opt/jdk1.6.0_18"

CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/opt/nginx-0.7.61/sbin:/opt/jdk1.6.0_18/bin:/opt/resin-3.0.25/bin:$PATH

export JAVA_HOME PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CLASSPATH

/usr/local/bin/xxresin_stop.sh

/usr/local/bin/xxresin_start.sh



二、同类型软件说明

crontab:crontab设置的任务将会一直循环的执行下去(适用于7*24小时不关机的服务)

anacron:anacron与anacrontab(秒级任务-适用于需要关闭的服务器,常用在以天单位或者开机之后执行任务)

     at:at可以处理和执行一次性任务调度的命令(Windows系统中的,不深究) #相关资料:http://blog.csdn.net/java_student09/article/details/52226144

三、Crontab参数

-u 指定用户下的计划任务,但会让任务更分散不好管理,优点更安全。 crontab -u user file

-i 删除确认 crontab -ri

-l 列表,列出,查看内容 相当于 cat /var/spool/cron/root \\root为用户名。 常用 crontab -l

-e edit 编辑创建crontab文件内容 相当于vi /var/spool/cron/root \\root为用户名 常用 crontab -e

-s 与selinux 相关

-r 删除crontab文件内容 remove (不常用)

四:Crontab特殊符号

特殊符号:

* 在crond中 * 代表任意时间 每 的意思 如: 00 23 * * * cmd 表示每月每周每日23:00 均执行 cmd任务

     注意: 每个事件位上的* 表示 每 ,如果位上是 * 就是该位上的取值范围, 例如: 小时上的 * 等于 00-23

     经验技巧: 定时任务规则如果到小时,口述时就是最多每天,分位上的 * 等于 0-59 表示每分。


- 减号 表示分隔符,表示一个时间范围,时间段,如 17-19点,就是 每天的 17 18 19 点的 0分 执行任务,例如:

     00 17-19 * * * cmd 就是指 17 18 19点分别执行的意思。


, 逗号,表示分割时段的意思。 30 17,18,19 * * * /bin/sh/scripts/oldboy.sh 表示 每天 17 18 19 点半 执行 /scripts/oldboy.sh 脚本,也可以和 " - " 结合使用

     如: 30 3-5,17-19 * * * /bin/sh /scripts/oldboy.sh 表示每天的 3点 4点 5点 17点 18点 19 点 分 别执行 /bin/sh /scrip/oldbou.sh 脚本


/n n代表数字,即‘每隔N单位时间’ , 例如: 每隔10分钟执行一次任务,可以写成 */10 * * * * cmd 其中 */10,*的范围是 0-59,因此也可以携程 0-59/10 每隔10分钟执行一次任务。

五:crontab 任务数列说明

系统默认定时任务为7段 用户的定时任务为6段:


# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed


min hour day month dayofweek

分 时 日 月 周


解释:

第一个 * 分 0-59 */10 每10分钟一次 也可以写成 0-59/10 10分钟一次

第二个 * 小时 0-23

第三个 * 天 1-31

第四个 * 月 1-12

第五个 * 周 0-6 或者 0-7 0和7都代表周日

第六个 * 执行shell命令解释器 如:/bin/sh , /

第七个 * 执行的脚本名

口诀 : 分 时 日 月 周 shell解释器 脚本名或脚本程序地址


# 如: # time sync by oldboy #---->>注释

        0 */2 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null2>&1 & #--->>计划任务动作


获取时间的表示:

+%X 表示 小时,分钟,秒 ,上午/下午 如:[root@~]# date +%X

                                        11:22:46 AM

+%F 表示 年 月 日 如:[root@~]# date +%F

                         2018-02-10

获取年月日时 : [root@~]# date +%F" "%X

                   2018-02-10 11:22:27 AM    

六:定时任务的规范

俗话说没有规矩不成方圆,定时任务是linux系统中非常重要的一个组件,几乎每个企业都会用到,所以书写规范是非常重要的

以下为规范书写的几条事项,请在以后工作中严格按照如下规范来执行定时任务


1.注释 -->>注释的作用是用于让它人清楚你所定义的定时任务的目的

2.命令放入脚本 -->>这一步很重要,也必须养成习惯,使用定时任务来调用 shll 脚本,如要修改可以不动crontab文件直接修改脚本文件

3.命令的无误测试 -->>无误测试也是做定时任务比较重要的环节,我们可以用 sh -x 来调试脚本

  调试过程:

  [root@oldboy /]# sh -x backup_new.sh

  + cd / #bash添加 /bin/bash,/bin/sh 才好执行 cd命令

  ++ date +%F

  + tar zcf backup/back_2017-10-10.tar.gz etc/rc.local var/spool/cron etc/hosts

  + xargs rm -rf

  + find backup -type f -mtime +3 -name '*.tar.gz'

   !!!#---->以上测试无错 即可进行下一步操作。 + 代表成功


4.打包类定时任务,先进入上级目录再进行打包操作 -->> 在定时任务中如有打包操作,最好是去上一级目录来进行,如果直接在当前目录打包会产生一些不必要的麻烦

5.打包链接文件 需要在tar 后加 h 参数 打包符号链接的文件,也就是打包快捷方式,不打包解压后是红色

6.规范脚本目录 -->>脚本分类很重要,定时任务中需要调用的脚本,请定义脚本专用目录,如:/server/scripts,通过目录名来区分,在写定时任务时添加脚本目录地址

7.取消无用的输出 -->>脚本执行的过程中有一些垃圾输出或无用输出需要避免,所以一般没有必要的垃圾输出请用 >/dev/null 2>&1 &&\ tar程序请不要加 v 输出

8.给脚本添加执行权限 -->>脚本执行需要x权限或管理员权限,请在完成脚本程序后 通过 chmod +x /shell/1.sh 来增加可执行权限

9.删除某条任务请先备份crontab文件或通过sed -i 来删除某条任务 -->>运维是一项高风险工作,任何影响到系统运行的程序或脚本在更改时一定要注意先备份,可设置备份文件夹,删除某条目前先将源文件备份要专用的备份文件夹中 --->> cp /var/spool/cron/root /cron_bak/root_cron$(date +\%F_\%X)

10.引导执行下一行 -->> 在crond文件中,如果后续还有别的程序要执行,请一定加上 &&\ 代表还有后续脚本需要执行

11.脚本文件请以.sh 作为扩展名,并添加 x 可执行权限

12.时间变量问题用反斜线\% 转义,最好用脚本。 如:tar zcvf /tmp/services_$(date +\%F-\%H":"\%M).tar.gz 以免报错

13.查看定时任务日志: tail /var/log/cron

14.定时任务需要执行,一定要开启定时任务的服务 #-->> service crond status 查看是否正在运行中

15. 定时任务执行的shell 请一定要指定命令解释器: #!/bin/sh,/bin/bash 


七:特别注意:

1.系统还将变量导致定时任务执行问题(java)

    http://oldboy.blog.51cto.com/2561410/1541515

    时间命令 最好环境变量中添加 /bin/date ,否则报错


2.脚本权限问题加 /bin/sh 或者查看是否有添加 x 权限


3.时间变量导致的问题比较多,请一定使用 $(date +\%F_\%X) 来操作

  # 定时任务中的 % 需要转义,而脚本中的 % 则无需转义


4.脚本中的命令尽量使用全路径


5.打包一个目录时 请跳转到上级目录再进行打包,不要进入需要打包的目录中操作


6.切记 脚本的调试非常重要 sh -x


7.定时任务执行的shell 请一定要指定命令解释器: #!/bin/sh


8.如有java程序运行必要 请在脚本中添加系统变量

    #!/bin/bash

    export JAVA_HOME=/application/jdk1.6

    export PATH=$JAVA_HOME/bin:$PATH

    export SH_HOME=/application/resin/webapps/ROOT/

    export LIB=$SH_HOME/WEB-INF/lib

八. crond案例示范(定时任务案例题):

第一题:    请写出5月5号上午9点 上课的规则?
00 09 05 05 * /bin/sh /scripts/shangke.sh

第二题:    请写出每周日上午9:30 去老男孩培训规则
30 09 * * */7 /bin/sh /scripts/shangke.sh

第三题:    请写出 每分钟向 /services/log/oldboy.log 文件中写入一次 oldboy 的脚本
*/1 * * * * /bin/sh /scripts/shangke.sh

第四题:    请写出 每隔两个小时 将/etc/services/ 文件夹打包到 /tmp 目录下且生成每次打包的时间(精确到分)
00 */2 * * * /bin/sh /bin/tar zcf /etc/services_$(date +%F"-" +%H).tar etc/services

第五题:    请写出 每周六周日上午9点和下午14点来老男孩培训,要求打印出打包时间 按天 打包
00 09,14 * * 6,7 /bin/sh /bin/tar zcf /etc/services_$(date +\%F).tar  etc/services

第六题:    请写出 每天晚上 00:30 打包站点目录 /etc/rc.local  /etc/hosts /var/spool/cron 到 /backup中 且 按当前时间打包(精确到年月日时) 

30 00 * * * /bin/sh tar zcf /backup/$date(+%F"_"+%X).zip etc/rcl.local etc/hosts var/spool/crnod


1.创建sh脚本文件

  touch /services/scripts/bak.sh

  vi /services/scripts/bak.sh

写入:

    #!/bin/sh,/bin/bash ##\\\这里最好加两个解释器 一个是/bin/bash 一个/bin/sh

    cd / &&\

    tar zcf /backup/tar_$(date +\%F).tar.gz etc/rc.local etc/hosts var/spool/crond

保存以上内容为 bak.sh

2.调试脚本sh -x:

[root@~]# sh -x /services/scripts/bak1.sh

+ cd /

++ date +%F

+ /bin/tar zcf /backup/tar_2018-02-10.tar etc/rc.local etc/hosts


! 如果过程中没有报错即 成功

3.验证


调试结果:

[root@~]# sh -x /services/scripts/bak1.sh

+ cd /

++ date +%F

+ /bin/tar zcf /backup/tar_2018-02-10.tar etc/rc.local etc/hosts
    
九.    计划任务工作流程图:




题外话: rm删除的注意

运维人员如何最大限度避免误删除文件(20160627更新)



误删除后的补救措施:
https://www.cnblogs.com/linux130/p/5764236.html

Linux计划任务 定时任务 Crond 配置详解 crond计划任务调试 sh -x 详解 JAVA脚本环境变量定义的更多相关文章

  1. JAVA JDK 环境变量配置 入门详解 - 精简归纳

    JAVA JDK 环境变量配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 13 转载请注明出处!️ 目录 JAVA JDK 环境变量配置 入门详解 - 精简归纳 一.为什么j ...

  2. Java&Tomcat环境变量配置

    版本匹配: Java PATH环境变量.作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把 jdk安装目录下的bin目录增加 ...

  3. Windows 配置JAVA的环境变量

    Java是由Sun公司开发的一种应用于分布式网络环境的程序设计语言,Java语言拥有跨平台的特性,它编译的程序能够运行在多种操作系统平台上,可以实现“一次编写,到处运行”的强大功能. 工具/原料 JD ...

  4. JAVA的环境变量配置(方式二)

    1.想要成功配置Java的环境变量,那肯定就要安装JDK(JDK安装包在方式一中),才能开始配置的. 2.安装JDK 向导进行相关参数设置.如图: 3.正在安装程序的相关功能,如图: 4.选择安装的路 ...

  5. java android 环境变量配置备忘录

    java android 环境变量配置备忘录,全新重装系统要用到,备忘下来; JAVA_HOME D:\Java\jdk1.6.0_07 CLASSPATH  .;%JAVA_HOME%\lib\dt ...

  6. 1、配置JAVA的环境变量

    想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的. 想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的. 安装JDK 向导进行相关参数设置.如图:   正在安装程 ...

  7. 在/etc/profile下配置java的环境变量

    在/etc/profile下配置java的环境变量 原创 Java 作者:xiaoyan5686670 时间:2016-01-18 14:30:28  6152  0 以root用户编辑:#vi /e ...

  8. Java JDK环境变量如何配置?Java基础!

    在了解什么是Java.Java 语言的特点以及学习方法之后,本节将介绍如何搭建编写 Java JDK环境变量如何配置,只有搭建了环境才能敲代码! 学Java的都知道,JDK 是一种用于构建在 Java ...

  9. Linux下配置java的环境变量,So Easy!!

    首先,在cd /usr ,mkdir java. 将java安装包放到/usr/java,并解压. 验证java. $ java -version 如果提示有如下安装包包含它,但是没有安装.是环境变量 ...

随机推荐

  1. 【转】LTE基本架构

    这篇文章主要介绍LTE的最基础的架构,包括LTE网络的构成,每一个网络实体的作用以及LTE网络协议栈,最后还包括对一个LTE数据流的模型的说明. LTE网络参考模型 这是一张非常有名的LTE架构图,从 ...

  2. java事件练习!!

    总结:不晓得怎么跟书上的运行结果显示的...希望标签竖直排列 package com.bc; import java.awt.Color; import java.awt.FlowLayout; im ...

  3. linux configure使用方法

    'configure'脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是 不会改变的.带上'--help'选项执行'configure'脚本可以看到可用的所有选项. ...

  4. 编译适用于TP-Link WR703N的OpenWRT固件

    编译适用于TP-Link WR703N TP-Link MR11U 以及使用AR9331芯片组的单WAN/LAN复用口的路由. 注:刷机有风险,刷机需谨慎.一般情况下是不会失败的,若无法通过捅Rese ...

  5. 基于人脸识别+IMDB-WIFI+Caffe的性别识别

    本文用记录基于Caffe的人脸性别识别过程.基于imdb-wiki模型做finetune,imdb-wiki数据集合模型可从这里下载:https://data.vision.ee.ethz.ch/cv ...

  6. 以ed结尾的单词

    1 规则动词词尾加-ed有三种读音 1.1 以清辅音结尾,加-ed    在清辅音后读作[ t ].如:     ask     →  asked                  look   → ...

  7. [Chapter 3 Process]Practice 3.2 Including the initial parent process, how many processes are created by the program shown in Figure?

    3.2 Including the initial parent process, how many processes are created by the program shown in Fig ...

  8. 球的移动(move)

    有n个盒子(1<=N<=1000)围成一个圈,每个盒子有ai个球,所有盒子的球的总数小于等于n.每一次移动,可以把一个球移动到它的一个相邻的盒子内.现在要使得每个盒子的球数<=1,求 ...

  9. 在云服务器上体验Docker

    1. 添加Docker repository key sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -" 2. ...

  10. SpringMVC中使用forward和redirect进行转发和重定向以及重定向时如何传参详解

    转自:http://blog.51cto.com/983836259/1877188 2016-11-28 09:45:59   如题所示,在SpringMVC中可以使用forward和redirec ...