当前位置: 首页 > 编程日记 > 正文

linux的 计划任务机制,自己带节奏

文章目录

        • 1. 解决问题
        • 2. 计划任务分类
        • 3. 一次性计划任务实现
          • 添加计划步骤
          • 注意事项
        • 4. 周期性计划任务实现
          • `cron`和`crontab`命令
        • 5. 延时计划任务
        • 6. `flock`脚本加锁,保证单实例运行

1. 解决问题

环境中有脚本需求,周期性运行或者固定时间运行脚本,为了保证脚本的正常运行以及不会有冲突,可以增加计划任务来保证脚本在指定时间,正常顺利运行。

2. 计划任务分类

  • 一次性计划任务
  • 周期性计划任务
  • 为脚本加锁

3. 一次性计划任务实现

添加计划步骤

核心命令at,可以通过man at查看具体详细用法

运行方式如下:

[root@node1 design_partten]$ date #获取系统时间
Fri Apr 17 17:13:21 CST 2020
[root@node1 design_partten]$ at 17:15 #在17:35 分执行如下命令
at> echo hello >/tmp/hello.txt
at> <EOT>                             #按 ctrl+d 提交计划
job 3 at Fri Apr 17 17:15:00 2020
[root@node1 design_partten]$ atq      #查看系统已有计划列表
3	Fri Apr 17 17:15:00 2020 a root
...[root@node1 design_partten]$ date
Fri Apr 17 17:15:08 CST 2020
[root@node1 design_partten]$ cat /tmp/hello.txt    #查看文件内容
hello
[root@node1 design_partten]$ ls -l /tmp/hello.txt  #查看文件创建时间
-rw-r--r-- 1 root root 6 Apr 17 17:15 /tmp/hello.txt

以上过程同样适用于脚本的执行,在指定时间执行脚本。

注意事项
  1. 计划中的命令 有可能不在$PATH路径变量中,添加计划时最好加入绝对路径

  2. 计划任务at没有终端,不支持标准输出,所以计划任务的输出结果需要重定向到文件才能查看。

    at> echo hello >/tmp/hello.txt

4. 周期性计划任务实现

croncrontab命令
  • 配置方式 crontab -e ,最小运行单位为分钟

  • 查看现有的计划任务crontab -l

  • 配置格式

    分钟 小时 日期 月份 星期 执行的命令

    注意命令的路径问题($PATH)

具体配置步骤如下:

$crontab -e 
#输入如下命令,表示任意时间就执行一次date命令,并将结果重定向到/tmp/data.txt
* * * * * /usr/bin/date >> /tmp/data.txt#通过tail -f /var/log/cron 查看针对crontab 的编辑操作
$tail -f /var/log/cron
Apr 17 17:39:04 node1 crontab[67309]: (root) REPLACE (root)
Apr 17 17:39:04 node1 crontab[67309]: (root) END EDIT (root)
Apr 17 17:39:23 node1 crontab[86411]: (root) BEGIN EDIT (root)
Apr 17 17:39:45 node1 crontab[86411]: (root) REPLACE (root)
Apr 17 17:39:45 node1 crontab[86411]: (root) END EDIT (root)
Apr 17 17:40:01 node1 CROND[96072]: (root) CMD (/usr/bin/date >> /tmp/data.txt)#查看执行结果
$cat /tmp/data.txt 
Fri Apr 17 17:40:01 CST 2020
Fri Apr 17 17:41:01 CST 2020
Fri Apr 17 17:42:01 CST 2020
Fri Apr 17 17:43:01 CST 2020$crontab -e
#周一到周五 ,每隔1分钟运行一次,不管月份和星期,则运行一次命令
* * * * 1-5 /usr/bin/date >> /tmp/data.txt
#7月7日,且这一天是周一到周五,则运行一次命令
* * 7 7 1-5 /usr/bin/date >> /tmp/data.txt
#每月15号 3.00整执行该命令
0 3 15 * * * /usr/bin/date >> /tmp/data.txt

5. 延时计划任务

当出现异常的时候:计划任务执行前2分钟操作系统关机,周期性计划任务就没办法执行。

此时推出延时计划任务:anacontab

编辑/etc/cron.d/0hourly查看内容如下:

# Run the hourly jobs,每小时的第一分钟运行一次
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#通过run-parts脚本,调用/etc/cron.hourly ,并在一个位置增加一个标记表示当前这一小时已经运行了。如果没有运行,则可以运行。
01 * * * * root run-parts /etc/cron.hourly 

编辑/etc/anacrontab

# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
# 随机的延时,数字0-45之间,选取任意一个数字用做延时的时间
RANDOM_DELAY=45 
# the jobs will be started during the following hours only
# 延时计划任务启动时间,数字在3-22点之间任选一个 数字运行
START_HOURS_RANGE=3-22#period in days   delay in minutes   job-identifier   command
#优先级是1,表示每天都运行,5表示延时时间。则运行时间范围是3:05-3:55(加入取的延时计划启动时间选取的是3点)
1	5	cron.daily		nice run-parts /etc/cron.daily #每天运行的任务
7	25	cron.weekly		nice run-parts /etc/cron.weekly #每周运行的任务
@monthly 45	cron.monthly		nice run-parts /etc/cron.monthly #每月运行的任务

6. flock脚本加锁,保证单实例运行

案例a.sh

#!/bin/bashsleep 3600

为了保证以上a.sh同一时间只运行一个,则可以使用flock增加排他锁

flock -xn "/tmp/f.lock" -c "/root/a.sh"
...

以上命令在第二个终端运行的时候则无法正常运行

flock -xn "/tmp/f.lock" -c "/root/a.sh"

相关文章:

erlang的tcp服务器模板

改来改去&#xff0c;最后放github了&#xff0c;贴的也累&#xff0c;蛋疼 还有一个tcp批量客户端的&#xff0c;也一起了 大概思路是 混合模式 使用erlang:send_after添加recv的超时处理 send在socket的option里面可以设置超时 accept&#xff0c;connect都可以在调用的时候传…

react select默认选项_reactjs – 如何为Picker提供默认的“Please select …”选项?

我想让我的Picker在启动时显示“默认选项”.这意味着&#xff1a;像“请选择一个选项”之类的东西.我试图用这个短语手动添加一个选项,但是,这样在选择其他选项后可以重新选择“默认选项”,就像它是真正的选项之一.有一些方法可以做到这一点&#xff1f;selectedValue{this.sta…

Git创建本地分支并关联远程分支

创建本地分支git branch 分支名 例如&#xff1a;git branch dev&#xff0c;这条命令是基于当前分支创建的本地分支&#xff0c;假设当前分支是master(远程分支)&#xff0c;则是基于master分支创建的本地分支dev。 切换到本地分支git checkout 分支名 例如&#xff1a;git ch…

shell --- awk规范 系统总结

文章目录awk和sed的区别awk脚本的流程控制awk 记录和字段字段的引用awk表达式赋值操作符算数操作符系统变量&#xff08;awk本身自定义的系统变量&#xff09;关系操作符布尔操作符awk 条件和循环条件语句循环awk 的数组数组的定义数组的遍历删除数组举例&#xff0c;编写awk脚…

java初始化实例化_Java对象的创建过程:类的初始化与实例化

一、Java对象创建时机我们知道&#xff0c;一个对象在可以被使用之前必须要被正确地实例化。在Java代码中&#xff0c;有很多行为可以引起对象的创建&#xff0c;最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象&#xff0c;这种方式在Java规范中被称为 …

CakePHP中出现persistent is not writable等Warning的解决方法

在新部署CakePHP项目或者从SVN中重新Update项目的时候&#xff0c;有时候会出现下面的警告&#xff1a; Warning (512): D:\xampp\htdocs\xxxx\app\tmp\cache\ is not writable [CORE\cake\libs\cache\file.php, line 281] Warning (512): \persistent\ is not writable [CORE\…

MySQL5.5加主键锁读问题

背景有同学讨论到MySQL 5.5下给大表加主键时会锁住读的问题&#xff0c;怀疑与fast index creation有关&#xff0c;这里简单说明下。对照现象为了说明这个问题的原因&#xff0c;有兴趣的同学可以做对比实验。1) 在给InnoDB表创建主键期间&#xff0c;会锁住该表上的读数据2)…

ansible之playbook

关键字 关键字 关键字 关键字 关键字 关键字转载于:https://www.cnblogs.com/shui-mo/p/10482375.html

设计模式 之美 -- 工厂方法模式

文章目录1. 解决问题2. 应用场景3. 实现如下C实现C语言实现4. 缺点1. 解决问题 在简单工厂模式中&#xff0c;我们使用卖衣服进行举例&#xff0c;同一种工厂可以卖很多不同种类的衣服&#xff0c;工厂只是将衣服的生产过程进行了封装。 当我们增加衣服种类的时候&#xff0c…

java shiro实例_Apache Shiro入门实例

Shiro是一个强大灵活的开源安全框架&#xff0c;提供身份验证、授权、会话管理、密码体系。1.先创建一个Maven项目2.配置pomhttp://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0cn.edu.stushiro-test0.0.1-SNAPSHOTorg.apache.shiroshiro-core1.3.0org.slf4jslf4j-log…

采购申请-MRP

1、手工建立采购申请&#xff1a; ME51N 申请单建立的时候&#xff0c;在不知道给哪个部门使用的时候可以在科目指派中选择U 分配并处理采购申请&#xff1a;me57 A:首先分配供应商 B:在转换成PO 点自动分配-》点分配-》点处理分配完成PR转变成PO 2、MRP 首先要建立BOM,然后在建…

【C语言】07-预处理指令;-宏定义

预处理指令简介; 1,C在对源程序进行编译之前,会对一些特殊的预处理指令作解释,产生一个新的源程序,此过程叫做编译预处理.C在经过编译预处理之后才对新的源码进行通常的编译; 2,预处理以‘#’开头,且结尾不用分号,(用于和一般的C语句区分开来). 3,预处理指令可以出现在出现的任…

idea基于hibernate生成的Entitle对象,会忽略外键属性

需要自己手动添加 如 private String cgcode;BasicColumn(name "cgcode")public String getCgcode() {return cgcode;}public void setCgcode(String cgcode) {this.cgcode cgcode;} 转载于:https://www.cnblogs.com/asusdell/p/10482657.html

编程模式 之美 -- 抽象工厂模式

文章目录1. 解决问题2. 应用场景3. 实现如下&#xff1a;C实现C语言实现4. 缺点1. 解决问题 在工厂方法模式中&#xff0c;我们卖衣服。此时我们为每一种衣服创建不同的工厂&#xff0c;帽子有一个工厂专门创建&#xff0c;裤子有一个工厂专门创建&#xff0c;T恤有一个工厂专…

java map class_java – 将通用Class参数限制为实现Map的类

我正在尝试编写一个Map构建器.其中一个构造函数将允许客户端指定他们希望构建的Map类型public class MapBuilder {private Map map;/*** Create a Map builder* param mapType the type of Map to build. This type must support a default constructor* throws Exception*/pub…

双击进入物料数据的指定视图

SET PARAMETER ID MAT FIELD i_matnr-matnr.“物料号SET PARAMETER ID MXX FIELD K. 进入基本视图 "Table T132CALL TRANSACTION MM03 AND SKIP FIRST SCREEN. MXX 可以在后台查看&#xff1a; SPRO->后勤系统-一般->物料主档->设定物料主档->…

java中Integer装箱的注意

Integer inb 2;//自动装箱 Integer inc 2; System.out.println(inb inc );//输出true Integer biga 128; Integer bigb 128; System.out.println(biga bigb);//输出false上面的代码来自李刚老师的书&#xff0c;应该注意其中的细节.上面的输出与Integer的设计有关。1.系统…

rem自适应js

Rem自适应js---flexible.min.js 网上看到很多移动端适配的各种方法&#xff0c;由于原来工作中对rem的疏忽&#xff0c;所以决定重新学习rem~ 由于移动端特殊性&#xff0c;本文讲的是如何使用rem实现自适应&#xff0c;或叫rem响应式布局&#xff0c;通过使用一个脚本就可以re…

设计模式 之美 -- 建造者模式

文章目录1. 解决问题2. 应用场景3. 实现C语言实现C实现4. 缺点1. 解决问题 描述如下场景&#xff1a; 类的数据成员很多&#xff08;8个以上&#xff09;&#xff0c;当我们进行初始化的时候放在初始化列表中&#xff0c;影响类的可读性&#xff0c;同时校验初始化参数列表是…

dateformat java 并发_java.text.DateFormat 多线程并发问题

在日常开发中&#xff0c;java.text.DateFormat 应该算是使用频率比较高的一个工具类&#xff0c;经常会使用它 将 Date 对象转换成字符串日期&#xff0c;或者将字符串日期转化成 Date 对象。先来看一段眼熟的代码&#xff1a;类 DateUtils 的方法 formatForDay() 在多线程的情…

每天一个摆脱if-else工程师的技巧——优雅的参数校验

在日常的开发工作中,为了程序的健壮性,大部分方法都需要进行入参数据校验。最直接的当然是在相应方法内对数据进行手动校验,但是这样代码里就会有很多冗余繁琐的if-else。throw new IllegalArgumentException("用户姓名不能为空");throw new IllegalArgumentException("性别不能为空");throw new IllegalArgumentException("性别错误");

我下载的最新的linux ADT+eclipse中没有NDK

问题描述我下载的是 adt-bundle-linux-x86_64-20140702.zip 这个版本。我已经安装了CDT了&#xff0c;但是还是没有NDK可以设置&#xff0c;而且在project右键android tools下 没有Add Native Support这个选项求指教&#xff0c;谢谢&#xff01; 解决方案1你的Eclipse插件好…

Android中去掉标题的方法总结

方法一&#xff1a;也一般入门的时候经常使用的一种方法在setContentView()方法的前面插入代码&#xff1a; requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 package com.example.helloword;import android.os.Bundle; import android.app.Activity; import and…

ImportError: No localization support for language ‘eng’ in python

ImportError: No localization support for language ‘eng’ in python 遇到這一個問題&#xff0c;是因為有缺少檔案&#xff0c;我是因為使用 pyinstaller 去包裝執行檔&#xff0c;所以需要手動加入這一個設定值進 .spec 檔案裡&#xff1a; hiddenimports[mysql,mysql.con…

C++ 智能指针(unique_ptr / shared_ptr)代码实现

文章目录unique_ptr 智能指针的实现shared_ptr 智能指针的实现指针类型转换unique_ptr 智能指针的实现 一个对象只能被单个unique_ptr 所拥有。 #include <iostream>using namespace std;/*增加模板类型&#xff0c;保证智能指针的类型是由传入的类型决定的*/ template…

winform实现截图

这个截图模仿QQ截图&#xff0c;左键单击开始截图&#xff0c;鼠标移动出现方框确定截图尺寸&#xff0c;放开时为最终尺寸&#xff0c;双击鼠标弹出保存对话框进行保存。 还有一点就是&#xff0c;如果截图尺寸方框已经确定&#xff0c;移动鼠标到所选区域内时&#xff0c;鼠标…

java interface list_你了解注解内的@interface List么

Annotation, Multi-valued annotation, nested annotation, 多值注解, 嵌套注解今天在研究Spring MVC的Validation机制时(这里 | 还有这里)&#xff0c;简单看了下一些注解的源码&#xff0c;比如Min&#xff0c;发现以前从来没注意到的注解写法。看来基础知识有疏漏啊.../*** …

Struts 2的输入校验(一)

9 Struts 2的输入校验输入校验有两种&#xff1a;客户端和服务器端校验。客户端校验一般是通过JavaScript来完成&#xff0c;这种校验可减轻服务器压力。服务器校验主要通过服务器端编程的方式来完成。(1) 客户端校验客户端校验一般是通过JavaScript来完成&#xff0c;这种校验…

通过document.domain实现跨域访问

通过document.domain实现跨域访问&#xff1a;https://blog.csdn.net/nlznlz/article/details/79506655 前端跨域方法之document.domain和location.hash&#xff1a;https://blog.csdn.net/WEB_YH/article/details/79364565 转载于:https://www.cnblogs.com/bydzhangxiaowei/p/…

设计模式 之美 -- 原型模式

文章目录1. 解决问题2. 应用场景3. 实现方式C实现C语言实现4. 缺点5. 和其他三种创建模式的对比&#xff08;单例&#xff0c;工厂&#xff0c;建造者&#xff09;1. 解决问题 如果对象的创建成本较大&#xff0c;而同一个类的不同对象之间的差别不大&#xff08;大部分字段相…