linux 定时执行 cron指令
linux 中的 cron 定时执行命令,先上例子:
每间隙两分钟把 "Hello world"写到 /tmp/hello.txt
crontab -e
*/2 * * * * echo "Hello world" >> /tmp/hello.txt
以下开始
先检查是否安装,如果没有安装,则安装
用 find 查看一下,然后判定该服务是否在运行,
使用 /sbin/service crond status 命令
如果没有安装,则先安装
以centos为例
yum -y install vixie-cron
yum -y install crontabs
运行:
service crond start
停止:
service crond stop
cron 服务每分钟不仅要读一次/var/spool/cron内的所有文件,
还需要读一次/etc/crontab,
因此我们配置这个文件也能运用cron服务做一些事情。
用crontab配置是针对某个用户的,
而编辑/etc/crontab是针对系统的任务。
/etc/crontab文件的文件格式如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使用者运行的路径,这里是根目录
# run-parts 01 * * * * root
# run-parts /etc/cron.hourly 02 4 * * * root
# run-parts /etc/cron.daily 22 4 * * 0
# root run-parts /etc/cron.weekly 42 4 1 * * root
# run-parts /etc/cron.monthly
cron 是一个可以用来根据时间、日期、月份、星期的组合
来调度对重复任务的执行的守护进程。
cron 的主配置文件是 /etc/crontab,它包括下面几行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
前四行是用来配置 cron 任务运行环境的变量。
SHELL 变量的值告诉系统要使用哪个 shell 环境(
在这个例子里是 bash shell);
PATH 变量定义用来执行命令的路径。
cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。
如果 MAILTO 变量被定义
为空白字符串(MAILTO=""),电子邮件就不会被寄出。
HOME 变量可以用来设置在执行命令或脚本时使用的主目录。
/etc/crontab 文件中的每一行都代表一项任务,它的格式是:
minute hour day month dayofweek command
minute — 分钟,从 0 到 59 之间的任何整数
hour — 小时,从 0 到 23 之间的任何整数
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有
效日期)
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、
feb 等等)
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(
或使用星期的英文简写如 sun、mon 等等)
command — 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也
可以是执行你自行编写的脚本的命令。)
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号
意味着在满足其它制约条件后每月都执行该命令。
整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。
用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的
整数。
正斜线(/)可以用来指定间隔频率。在范围后加上 /<integer> 意味着在范围内
可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率
值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行
一次任务。
开头为井号(#)的行是注释,不会被处理。
如你在 /etc/crontab 文件中所见,它使用 run-parts 脚本来执行
/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly
目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中
的文件应该是 shell 脚本。
如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执
行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和
/etc/crontab 中一样的语法。
crontab 的例子1:
根用户以外的用户可以使用 crontab 工具来配置 cron 任务。
所有用户定义的 crontab 都被保存在 /var/spool/cron 目录中,
并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,
登录为该用户,然后键入 crontab -e 命令,
使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。
该文件使用的格式和 /etc/crontab 相同。
当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,
并写入文件 /var/spool/cron/username 中。
cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、
以及 /var/spool/cron 目录中的改变。如果发现了改变,
它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护
进程了。
控制对 cron 的使用2:
/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。
这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。
如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
无论使用控制文件中的规定如何,根用户都总是可以使用 cron。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,
并且 cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用
cron。
启动和停止服务
要启动 cron 服务,使用 /sbin/service crond start 命令。要停止该服务,
使用 /sbin/service crond stop 命令。推荐你在引导时启动该服务。
Crontab使用详解
先来个测试的例子,每间隙两分钟写把 hello world写到/tmp/hi文件中
crontab -e
输入
*/2 * * * * echo "hello world." >> /tmp/hi.txt
名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
crontab文件的格式:M H D m d cmd.
基本格式 :
* * * * * command
分 时 日 月 周 命令
M: 分钟(0-59)。每分钟用*或者 */1表示
H:小时(0-23)。(0表示0点)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环
境变量
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是
类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是
root)才能够指定他人的时程表。
如果不使用 -u user 的话,就是表示设定自己的时程表。
参数 :
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想
用别的文字编辑器,
则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL
joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份
,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程
序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时
表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时
个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,...
时表示第 a, b, c...个小时要执行,其馀类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设
定时程表。
例子 :
#每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次
/usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 lin3615@lin3615.com :
0 17 * * 1-5 mail -s "hi" lin3615@lin3615.com < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
=====================================
以下是用来执行PHP脚本和mysql数据库自动备份
执行php脚本时,在nginx中执行 php文件,两分钟执行一次
/usr/local/nginx/html/test.php
可以在 crontab中写,以下是 nginx下的php文件,
其中test.php文件中可以包含别的文件,php-fpm的路径一定要正确
*/2 * * * * /usr/local/bin/php-fpm /usr/local/nginx/html/test.php
apache下可以是这样,test.php中可以包含别的文件:
*/2 * * * * /usr/local/bin/php /usr/local/apache2/htdocs/test/test.php
还可以用 url访问,但是要安装 lynx,
假如lynx是安装在 /usr/bin/lynx,
则(可以包含其中的文件:)
*/2 * * * * /usr/bin/lynx -source http://www.lin3615.net/test.php
还可以把 .php文件放在非web目录下,
如 /usr/local/下, test.php (可以包含其中的文件):
*/2 * * * * /usr/local/bin/php /usr/local/test.php
备份mysql数据库
第一步:在服务器上配置备份目录代码
mkdir /var/lib/mysqlbackup
cd /var/lib/mysqlbackup
第二步:编写备份脚本代码:
vim dbbackup.sh
粘帖以下代码,更改其中的username,password和dbname,mysqldump的路径一定要正确,绝对路径,可用 find 找 mysqldump
#!/bin/sh
/绝对路径/mysqldump -uuser -ppassword dbname | gzip > /var/lib/mysqlbackup/dbname`date +%Y-%m-%d_%H%M%S`.sql.gz
cd /var/lib/mysqlbackup
rm -rf `find . -name '*.sql.gz' -mtime 10` #删除10天前的备份文件
第三步:更改备份脚本权限
chmod +x dbbackup.sh
第四步:用crontab定时执行备份脚本代码
crontab -e
若每天晚上01点00备份,添加如下代码,
00 01 * * * /var/lib/mysqlbackup/dbbackup.sh
linux 定时执行 cron指令的更多相关文章
- Linux定时任务系统 Cron
运行计划任务时:service crond restart提示:crond: unrecognized service安装计划任务:yum -y install vixie-cron 另外附计划任务的 ...
- linux定时执行任务 转
转自:http://www.cnblogs.com/thinksasa/archive/2013/06/06/3121030.html linux定时执行任务 (1)Linux下如何定时执行php ...
- linux实现php定时执行cron任务详解(转)
对于PHP本身并没有一套解决方案来执行定时任务,不过是借助sleep函数完成的.这种方就是要提前做一些配置,如实现过程: 复制代码 代码如下: ignore_user_abort();//关掉浏览器, ...
- linux定时执行任务crontab命令用法
linux系统的定时任务是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外, 由于使用者自己也可以设置计划任务,所 ...
- 【转】linux 定时执行shell脚本
在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...
- linux定时执行任务
(1)Linux下如何定时执行php脚本?(2)Linux下如何设置定时任务?(3)Crontab定时执行程序 核心提示:键入 crontab -e 编辑crontab服务文件 分为两种情况:(还有一 ...
- Linux定时执行任务命令概述:at和crontab
本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...
- linux 定时执行shell脚本
转自:http://blog.csdn.net/jingxiangren/article/details/4745631 在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程, ...
- 转 Linux定时执行任务命令at和crontab
本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...
随机推荐
- 《Maven_孔浩》Maven介绍及安装
maven是apache基金会下的一个项目管理工具. 安装步骤 1.下载并解压 2.配置环境变量M2_HOME(解压后的目录):将M2_HOME\bin加入到PATH环境变量中 3.测试:在命令行输入 ...
- PAT 1011
1011. World Cup Betting (20) With the 2010 FIFA World Cup running, football fans the world over were ...
- jQuery中要注意的一些函数
has()方法 或 :has选择器 :是过滤子类含有的,并不是过滤当前选择器选择的元素或对象含有的
- 【转】频点CTO张成:基于Cocos2d的MMORPG开发经验
http://www.9ria.com/plus/view.php?aid=27698 作者: zhiyuanzhe3 发表时间: 2013-06-29 17:46 6月29日,由9Tech社区.51 ...
- Java + MongoDB Hello World Example--转载
原文地址:http://www.mkyong.com/mongodb/java-mongodb-hello-world-example/ A simple Java + MongoDB hello w ...
- MySQL(6):数据操作
1.创建数据(插入数据) (1)insert into tab_name(字段列表) values(值列表) (2)如果需要在插入时,为所有的字段设置值,那么可以省略字段列表.要求是值的顺序,应该 ...
- 3D分析之Functional Surface工具箱(转)
来自:http://blog.csdn.net/kikitamoon/article/details/8195797 1. Add Surface Information(添加表面信息) 向点.线或面 ...
- 深圳安全研讨会圆满结束,PPT共享下载
深圳安全研讨会圆满结束,PPT共享下载: http://pan.baidu.com/s/19XFtO
- FIO工具常用参数
name 可能被用于覆盖作业的名称. filename fio 通常基于该作业名称,线程编号,构成一个文件名称和位置.如果您不想让线程之间的共享文件在一个作业或作业.指定文件名都以覆盖默认的. loc ...
- 在orangepi-PC下使用pyopengl
在OrangePi-PC下安装显卡驱动以及opengl: http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid= ...