Linux 定时执行shell 脚本

2019年第 85 篇文章,总第 109 篇文章

本文大约2000字,阅读大约需要6分钟

crontab 可以在指定的时间执行一个shell脚本以及执行一系列 Linux 命令。

定时执行shell 脚本

简单给出执行 shell 脚本的步骤。

  1. 首先是编写一个测试脚本--test.sh

# 创建脚本
$ vim test.sh
# 在脚本中做写入文件操作
date >> data.txt
  1. 修改脚本的权限,确保脚本有执行的权限

chmod 777 test.sh
  1. 设置 crontab 定时任务

# 打开定时任务配置文件
crontab -e
# 在配置文件中写入定时任务的操作, 这里就是指定每天12点定时执行脚本,并把执行脚本的日志写入文件 test.log
0 12 * * * sh test.sh > test.log
  1. 保存退出,也就是 :wq

  2. 如果有错,linux 会在执行的时候发送一份邮件给你

cat /var/spool/mail/root

注意:

crontab 是运行在系统默认环境里,如果运行的脚本是执行 python 代码,即脚本的内容可能是:

python test.py

这里的 python 会是系统默认的 python 版本,而如果你是运行在 conda 环境里,那么这里就需要采用当前环境里 python 版本的执行文件的绝对路径,即先用以下命令查找当前 python 版本的执行文件位置:

$ which python
# 假设输出的文件位置为:
/root/anaconda3/py3/bin/python

这里输出的路径,直接替换脚本里的 python:

/root/anaconda3/py3/bin/python test.py

这样才能保证运行不出错,否则可能因为版本问题出错;


crontab命令详解

常用命令

crontab –e     //修改 crontab 文件,如果文件不存在会自动创建。
crontab –l      //显示 crontab 文件。
crontab -r      //删除 crontab 文件。
crontab -ir     //删除 crontab 文件前提醒用户。service crond status     //查看crontab服务状态
service crond start     //启动服务 
service crond stop     //关闭服务 
service crond restart     //重启服务 
service crond reload     //重新载入配置

所以如果需要取消某个定时任务,就是可以删除在配置文件中的对应命令,即 crontab -e 打开文件,然后删除对应哪行的命令即可

基本格式

*  *  *  *  *  command
分  时  日  月  周   命令

第1列表示分钟 00~59 每分钟用*或者 */1表示

第2列表示小时 00~23(0表示0点)

第3列表示日期 01~31

第4列表示月份 01~12

第5列标识号星期 0~6(0表示星期天)

第6列要运行的命令

此外每一列除了数字,还可以有这些符号,其含义如下所示:

*        代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行
,        代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,12,16点0分执行
-        代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六凌晨5点0分执行
*/n     代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次

示例

1、在 凌晨00:10运行

10 0 * * * sh test.sh

2、每个工作日23:59都进行备份作业。

59 23 * * 1,2,3,4,5 sh test.sh   
或者  
59 23 * * 1-5 sh test.sh

3、每分钟运行一次命令

*/1 * * * * sh test.sh

4、每个月的1号 14:10 运行

10 14 1 * * sh test.sh

5、每10分钟定时请求一个地址

0 */10 * * * /usr/bin/curl http://www.aaa.com/index.php

注意,一般最好不要同时采用几号和每周几,可能会出现混淆;

正确、错误日志的输出是否写入到文件方法

1.不输出任何内容(建议使用方法一)

*/1 * * * * /root/XXXX.sh >/dev/null 2>&1 
或
*/1 * * * * /root/XXXX.sh &>/dev/null    //&表示任何内容

2.将正确和错误日志都输出到 /tmp/load.log

*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1

3.只输出正确日志到 /tmp/load.log

*/1 * * * * /root/XXXX.sh > /tmp/load.log
或
*/1 * * * * /root/XXXX.sh 1> /tmp/load.log    //1可以省略

4.只输出错误日志到 /tmp/load.log

*/1 * * * * /root/XXXX.sh 2> /tmp/load.log

部分解释:

/dev/null 代表空设备文件
> 代表重定向到哪里
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

参考文章:

  • Linux 定时执行shell脚本命令之crontab:https://www.cnblogs.com/wenzheshen/p/8432588.html

  • linux定时执行sh文件:https://blog.csdn.net/IT_xiaocao/article/details/78206364


欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

如果觉得不错,在看、转发就是对小编的一个支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react学习(14)-getTime是对时间进行处理的方法

{name: data?.name,startTimeLong: new Date(data?.code[0]).getTime(),endTimeLong: new Date(data?.code[1]).getTime(),},() > {this.getFrameList();}

同余定理

http://www.cnblogs.com/zhixingqiezhixing/archive/2012/04/03/2430676.html http://blog.sina.com.cn/s/blog_6e223f1d0101bkry.html 转载于:https://www.cnblogs.com/thefirstfeeling/p/4410970.html

简单总结 2019 展望 2020

2019 总结整体回顾一下今年,一个完整的经济独立的一年,也是工作满一年,改变很多,虽然有进步,但还不够明显,依然存在的三分钟热度、拖延、执行力低下的问题。工作这一年做的还是同一个项目,不过具…

react学习(15)-getTime selectedRowKeys是this.props取值的

const rowSelection {selectedRowKeys,onChange: this.onSelectChange,};

RS(1)--10分钟了解什么是推荐系统

总第 110 篇文章,本文大约 3200 字,阅读大约需要 10 分钟2020 年第一篇技术文章,以一个新的系列开始--推荐系统(Recommend System),第一篇文章会简单介绍推荐系统的定义和应用,目录如下&#xf…

当搭配遇上个性化推荐

总第 111 篇文章,本文大约 3000 字,阅读大约需要 10 分钟今天介绍的是一篇个性化搭配推荐的论文,是 2017 年时候的论文,这也是比较早的开始结合搭配和个性化推荐的一个工作,基于度量学习和排序学习的方法。论文题目&am…

清除浮动造成的影响的解决方案总结

1、将设置float的元素的父元素也设置float。 缺点:很有可能不符合情况要求 2、设置父元素的position为absolute,前提是父元素的父元素并没有设置position:relative。 缺点:很有可能不符合情况要求 3、设置父元素的overflow为hidde…

2020年周记(1/50)

总第 112 篇文章,本文大约 1200 字,阅读大约需要 3 分钟正如标题所言,希望 2020 年能写满 50 篇周记吧,刚好前两周没有发,所以希望接下来每周完成一篇。周记的内容主要是这几方面的内容:工作学习阅读&…

react学习(16)---getFieldDecorator赋值

<Row gutter{12}><Col span{12}><Form.Item label"名称">{getFieldDecorator(name, {rules: [{ required: true, message: 活动名称不能为空 }],})(<Input placeholder"请输入" />)}</Form.Item></Col></Row>

python版代码整洁之道

总第 113 篇文章&#xff0c;本文大约 8000 字&#xff0c;阅读大约需要 20 分钟原文&#xff1a;https://github.com/zedr/clean-code-pythonpython 版的代码整洁之道。目录如下所示&#xff1a;介绍变量函数1. 介绍软件工程的原则&#xff0c;来自 Robert C. Martins 的书--《…

react学习(17)----ant design格式化日期

<Row gutter{12}><Col span{12}><Form.Item label"活动结束时间">{getFieldDecorator(endTimeLong, {rules: [{ required: true, message: 活动结束时间不能为空 }],})(<DatePicker format"YYYY-MM-DD HH:mm:ss" />)}</Form.It…

MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。...

MVC3.0框架开发项目&#xff1a; 有时在程序运行的时候会出现“HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除&#xff0c;或其名称已更改&#xff0c;或暂时不可用。请检查以下 URL 并确保其拼写正确。”的错误提示。 在这里我们以运行时打开登录页面&#xff…

2020年1月总结

总第 114 篇文章&#xff0c;本文大约 1300 字&#xff0c;阅读大约需要 4 分钟这是 2020 年的第一篇月总结&#xff0c;总结的内容和周记差不多&#xff0c;也还是从这几个方面进行总结&#xff1a;工作学习阅读&写作2月计划工作这个月的工作时间大概是2周多一点&#xff…

python技巧(1)--如何转换itertools.chain对象为数组

总第 115 篇文章&#xff0c;本文大约 900 字&#xff0c;阅读大约需要 3 分钟之前做1月总结的时候说过希望每天或者每2天开始的更新一些学习笔记&#xff0c;这是开始的第一篇。这篇介绍的是如何把一个 itertools.chain 对象转换为一个数组。参考 stackoverflow 上的一个回答&…

asp.net如何给每张图片动态添加水印方法(二)

第一步&#xff0c;在App_Code中新建一个类&#xff0c;类名为BookCoverHandler&#xff0c;然后代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Drawing; using System.Drawing.Imaging; using System.IO; ///…

python技巧(2)--碾平列表和列表去重

总第 116 篇文章&#xff0c;本文大约 1000 字&#xff0c;阅读大约需要 3 分钟今天介绍和列表相关的两个小技巧&#xff1a;碾平列表&#xff08;flatten list&#xff09;&#xff0c;也就是列表里的元素也带有列表的情况&#xff1b;列表去重&#xff0c;保留原始顺序和不保…

typedef struct 是什么意思

typedef用于定义一种新类型例如定义了如下的结构typedef struct student{int age;int score;}STUDENT;那么则有STUDENT stu1;就相当于struct student stu1&#xff1b;上面的结构也可以直接定义为&#xff1a;typedef struct {int age;int score;}STUDENT;然后将STUDENT作为新…

react学习(19)----可以通过设置默认值去回调

const {dispatch,activity: { cmsPopupList [] },} this.props;