Linux下设置定期执行脚本
下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别。
在Linux下,经常需要定期的执行一些脚本从而来实现一些功能。
在Linux下我们用crontab来实现定期的执行脚本这个功能,下面就介绍一下crontab的使用。以及我遇到的一些问题
一. crontab的使用说明
1. crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类
a. 系统执行的工作,比如垃圾清理,备份
b. 用户自定义的工作,比如每5分钟执行一次脚本
2. crontab是UNIX系统下定期执行任务的触发器。用户把要定期执行的任务记录在这个文件下面,然后crond定期的去检查这个定期执行列表,有要执行的工作时便自动执行。通过man crontab可以查看到下面的信息a. /etc/crond.allow 表示的是允许使用crontab的用户列表b. /etc/crond.deny 表示的是不允许使用crontab的用户列表3. crontab常用的几个命令格式crontab -l //显示用户的crontab文件的内容crontab -e //编辑用户的crontab文件的内容crontab -r //删除用户的crontab文件4. crontab文件的基本格式如下所示* * * * * command分 时 天 月 周 命令每列表示意义a. 第一个*表示的是分钟1~59分钟,默认*表示的是每分钟都执行,x-y表示的是x~y这段每分钟都执行,*/n表示每n分钟执行一次,x,y,z表示的是x,y,z分钟都执行。b. 第二个*表示的是小时1~23小时,默认*表示的是每小时都执行,x-y表示的是x~y这段每小时都执行,*/n表示每n小时执行一次,x,y,z表示的是x,y,z小时都执行。c. 第三个*表示的是天1~31,默认*表示的是每天都执行,x-y表示的是x~y这段每天都执行,*/n表示每n天执行一次,x,y,z表示的是x,y,z天都执行。d. 第四个*表示的是月1~12,默认*表示的是每个月都执行,x-y表示的是x~y这个段每月都执行,*/n表示每n分钟执行一次,x,y,z表示的是x,y,z天都执行。e. 第五个*表示的是周0~6(0表示周天),默认周一~周天都执行,x-y表示周x~周y每天都执行。5. crontab文件的一些例子a. 30 21 * * * /usr/local/etc/rc.d/lighttpd restart //表示每天21:30重启apacheb. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart //表示每月1,10,22号4:45重启apachec. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart //表示每天18 : 00至23 : 00之间每隔30分钟重启apached. * */1 * * * /usr/local/etc/rc.d/lighttpd restart //表示每一小时重启apachee. */5 * * * * /usr/local/etc/rc.d/lighttpd restart //表示每5分钟重启apache
二. 具体例子
1. 首先我在/home/chenguolin/tmp/ 创建一个shell脚本名为s.sh。注意脚本内部的路径使用绝对路径。
这个脚本的功能就是把当前的日期输出重定向到当前目录下的out文件
2. 然后设置每2分钟执行一次这个脚本,>/dev/null 2>&1。原因是因为系统会在每次执行完任务之后就发一个邮件告诉用户,通过这个操作可以把信息全部重定向到/dev/null中,/dev/null这个文件类似回收站过一段时间系统自动清理。*/2 * * * * sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1然后发现过了n个2分钟,out文件根本就没有输出。3. 在谷歌/百度无果之后,问了同事,得到了原因是因为crontab可能有时候没有办法执行用户家目录下面的两个文件,分别是.bashrc和.bash_profile这两个文件的作用如下.bashrc作用是用于你的bash shell的bash信息,当登录时及每次打开新的shell时,该文件被读取;.bash_profile作用是每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件,因此我们要手动在crontab文件中添加source /home/chenguolin/.bashrc && source /home/chenguolin/.bash_profilesource的作用是当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。因此crontab文件中变成*/2 * * * * source && /home/chenguolin/.bashrc && source /home/chenguolin/.bash_profile && sh /home/chenguolin/tmp/s.sh >/dev/null 2>&14. 发现可以定时的执行脚本。如果还不行,那只能通过查找log来查错。非ubuntu的Linux crond的日志文件保存在/var/log下
三. ubuntu下使用crontab定时执行脚本
注意下几个问题以
1. ubuntu下crontab的服务程序是cron,并且默认cron服务的log是没有的,我们必须手动开启
a. sudo vim /etc/rsyslog.d/50-default.conf
b. 找到cron.*那一行把注释去掉
c. 然后重启cron服务 sudo service cron restart
d. 这样就可以在/var/log里面发现有cron的日志文件了,我们就可以通过查看日志文件找到问题所在
2. ubuntu下,用户家目录下是没有.bash_profile文件的,并且会自动去执行.bashrc文件,只要写成下面这样即可
/2 * * * sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1
总结:
crontab -e
30 18 * * * /bin/sh /home/zhuyong/share/script/Blink_NS010.sh | tee /home/zhuyong/share/Blink_NS010_build.log 2>&1
Linux下设置定期执行脚本相关推荐
- linux下设置定时执行脚本
linux下设置定时执行脚本 1.首先安装所需程序并启动 crontabs是设置周期性被执行的指令 yum install vixie-cronyum install crontabsservice ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- Linux下Crontab定时执行命令
Linux下Crontab定时执行命令 目录 Crontab概述及安装 Crontab规则 常见例子 1. Crontab概述及安装 1. Crontab指令是Linux下执行定时任务的一个命令. 2 ...
- hudson linux节点,在Linux下设置Hudson进行连续集成
在Linux下设置Hudson持续集成 哈德森监督执行重复的工作,例如建立一个软件项目或由cron运行的工作. 本文介绍如何在Linux上进行设置. 1准备 1.创建目录结构如下: /var/huds ...
- Linux下的lds链接脚本详解
一. 概论 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分 ...
- 手把手教学Linux下oracle11g自动化安装脚本编写
手把手教学Linux下oracle11g自动化安装脚本编写 产品:Oracle 版本:11.2.0.4 环境:Centos7 文章目录 手把手教学Linux下oracle11g自动化安装脚本编写 0. ...
- linux系统中建立网络白名单,Linux下设置防火墙白名单(RHEL 6和CentOS 7)的步骤
进入Linux 命令行,编辑防火墙规则配置文件 iptables vi /etc/sysconfig/iptables 下面是一个白名单设置的例子: # Firewall configuration ...
- ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell
最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell 执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip 把这个文 ...
- Linux下Apache自动监测重启脚本
Linux下Apache自动监测重启脚本(智能化程度较高) 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协议,转载须注明链接] 本文所述apache监控脚本已经过VPS管理百科验证 由于 ...
- 怎么设置linux端口权限,Linux下设置端口权限的系统调用—ioperm和iopl
Linux 下设置端口权限的系统调用有两个: ioperm 和 iopl . 一. ioperm 和 iopl 介绍. 1.ioperm 该系统调用的介绍参考了以下链接中的内容: http://blo ...
最新文章
- git 从远程主服务器当中创建新分支
- 某程序员哀叹:二本计算机,4年开发,年包才40多万。二本真的不如985/211吗?...
- 计算机及网络应用基础思维导图_计算机基础/算法/面试题 PDF+思维导图下载
- js中执行到一个if就停止的代码_Node.JS实战64:ES6新特性:Let和Const。
- 正则表达式基础知识及应用(用于个人学习以及回顾)
- Oracle EBS-SQL (QA-1):检查超出检验周期的检验数据.sql
- C#趣味程序---三色球问题
- 数学之美:两点之间最快的路径是什么?能看到最后的都是学霸
- el-select下拉框组件el-option如何使用v-for动态渲染问题 - 方法篇
- 开课吧python全栈靠谱么-杭州Web全栈
- 拓端tecdat|R语言多元动态条件相关DCC-MVGARCH、常相关CCC-MVGARCH模型进行多变量股市波动率预测
- 分析LOIC流,判断DDoS攻击源
- C#--图表控件(Chart)
- Android network框架分析之NetworkManagementService和netd交互深入分析(二)
- web3调用智能合约取事件
- 【2020总结】脚踏实地,仰望星空
- 360极速浏览器的兼容模式
- 黑马程序员全套Java教程_Java基础入门视频教程零基础自学Java必备教程视频讲义(5)
- 【Java】java修炼之道
- 正版现货黄金怎么区分(上)