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重启apache
b. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart //表示每月1,10,22号4:45重启apache
c. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart //表示每天18 : 00至23 : 00之间每隔30分钟重启apache
d. * */1 * * * /usr/local/etc/rc.d/lighttpd restart //表示每一小时重启apache
e. */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_profile
source的作用是当前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>&1
4. 发现可以定时的执行脚本。
如果还不行,那只能通过查找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
Linux下设置定期执行脚本的更多相关文章
- linux crontab设置定期执行脚本
Linux下crontab命令的用法 任务调度的crond常驻命令crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分锺会定期检查是否 ...
- 一个简单的linux下设置定时执行shell脚本的示例
很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 shell Shell俗称壳,类似于DOS下的command ...
- linux下设置php执行命令
第一种方法: 打开用户根目录下的: vi ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bash ...
- linux下设置计划任务执行python脚本
linux下设置计划任务执行python脚本 简介 crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自 ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- Linux 通过cron定期执行 php文件(转)
Linux 通过cron定期执行 php文件 补充几点: 1. 要在php文件头加上解释器的路径,通常是 #!/usr/bin/php 2. 授予要执行的php文件执行权限 chmod a+x x ...
- [转]Linux下的lds链接脚本详解
转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml 一. 概论 每一个链接过程都由链接脚本(lin ...
- Linux下的lds链接脚本简介
转载:http://hubingforever.blog.163.com/blog/static/171040579201192472552886/ 一. 概论 每一个链接过程都由链接脚本(lin ...
- Linux下的lds链接脚本详解【转】
转自:http://www.cnblogs.com/li-hao/p/4107964.html 转载自:http://linux.chinaunix.net/techdoc/beginner/2009 ...
随机推荐
- How a non-windowed component can receive messages from Windows -- AllocateHWnd
http://www.delphidabbler.com/articles?article=1 Why do it? Sometimes we need a non-windowed componen ...
- Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本号的开发环境
写这篇博客时2D游戏引擎Cocos2d-x的最新版本号为2.1.4,记得非常久曾经使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs2010配置图文具体解释(亲測)>成功 ...
- C++异常
相对于C语言,C++增加了异常机制.考虑,异常解决了什么问题,又带来了什么问题. 异常解决了什么问题: 1.问题检测与问题处理相分离. 2.C语言只是返回一个整数,而异常带有上下文信息,方便找出问题. ...
- C#类的成员初始化顺序
首先我们来看看引用类型的成员初始化过程 我们来看一个例子吧 class Program { static void Main(string[] args) { Driv ...
- 【PAT】1029. Median (25)
Given an increasing sequence S of N integers, the median is the number at the middle position. For e ...
- 【ArcGIS 10.2新特性】Portal for ArcGIS新特性
1.概述 经过各版本的积累和更新,Portal for ArcGIS在ArcGIS10.2中以正式产品的形态加入到了ArcGIS系列产品线中.它有3个主要定位:协同管理平台.在线制图平台以及内容管理平 ...
- 一步步学Mybatis-怎么样实现动态SQL查询(6)
上一章我们已经讲完了关于Mybatis的分页用法,其实MyBatis 还具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 S ...
- android手机打电话代码分析
智能手机的打电话功能是由RIL部分来实现的,见下图: 开始分析Android源代码中的RIL部分. 又上图,以及其他相关资料,我得知在Android中有一个叫rild的守护进程.我猜测此进程与电话的拨 ...
- 【SSH三大框架】Hibernate基础第二篇:编写HibernateUtil工具类优化性能
相对于上一篇中的代码编写HibernateUtil类以提高程序的执行速度 首先,仍然要写一个javabean(User.java): package cn.itcast.hibernate.domai ...
- 不相交集(The Disjoint Set ADT)
0)引论 不相交集是解决等价问题的一种有效的数据结构,之所以称之为有效是因为,这个数据结构简单(几行代码,一个简单数组就可以搞定),快速(每个操作基本上可以在常数平均时间内搞定). 首先我们要明白什么 ...