linux缺省会启动crond进程,crond进程不需要用户启动、关闭。
需要启动/关闭cron
/sbin/service crond start --启动服务 /sbin/service crond stop --关闭服务 /sbin/service crond restart --重启服务 /sbin/service crond reload --重新载入配置
crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。
cron的调度文件
cron的调度文件
有以下几个:
crontab
cron.d
cron.daily
cron.hourly
cron.monthly
cron.weekly
如果用的任务不是以hourly monthly weekly方式执行,则可以将相应的crontab写入到crontab 或cron.d目录中。
存放文件
/etc/cron.deny 文件列出所有不允许使用 crontab命令的用户 /etc/cron.allow 文件所列的用户允许使用crontab命令 /var/spool/cron 所有用户的crontab文件 /var/spool/cron/crontabs
1、直接用crontab 命令编辑
cron服务提供 crontab 命令来设定cron
命令格式为:crontab -l|-r|-e|-u [username]
参数含义:
crontab -l 列出某个用户的cron服务内容 crontab -e 编辑某个用户的cron 的内容 crontab -r 移除某个用户的cron的所有内容 crontab -u 设定某用户的cron服务
命令如:
root 查看自身的cron设置:crontab -u root -l
删除用户test的cron设置:crontab -u test -r
内容格式:* * * * *命令前面的五个*号,表示分,时,日,月,周
如:代表意义 分钟 小时 日期 月份 周
数字范围 0-59 0-23 1-31 1-12 0-7
数字范围 0-59 0-23 1-31 1-12 0-7
例如:#crontab -e59 23 1 5 * mail linuxing < /home/test.txt
每在5月1日,23点59分就把/home/test.txt的内容作为邮件发给linuxing用户
每在5月1日,23点59分就把/home/test.txt的内容作为邮件发给linuxing用户
*/5 * * * * /opt/test.sh 每5分钟就执行一次/opt/test.sh脚本 0 3,6 * * * /usr/local/bin/test.sh 每在3点和6点整点都执行/usr/local/bin/test.sh命令 0 8-12 * * * /root/backup.sh 8 点到 12 点之间的每小时的0分都执行/root/backup.sh 0 */2 * * * echo "Have a break now." >> /tmp/test.txt 每两个小时 0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt 晚上11点到早上8点之间每两个小时,早上八点 0 11 4 * 1-3 command line 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 0 4 1 1 * command line 1月1日早上4点 01 6 * * * find /home/mysql/databack/* -mtime 30 -print|xargs rm -rf 定时清除 数据库备份
2、编辑/etc/crontab 文件配置cron
cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用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 //每小时执行/etc/cron.hourly内的脚本 02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本 22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本 42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。
典型例子:
定时备份mysql 数据库
1、crontab -e
2、01 3 * * * /home/backmysql
3、vim /home/backmysql
#!/bin/sh rq=`date +%Y%m%d` mysqldump -uroot -p123456 teatop_db --skip-lock-tables >/mysqldata/databack/mysql$rq.sql
4、/sbin/service crond restart
定时备份redis
1、crontab -e
2、01 3 * * * /home/redis.sh
3、vim /home/redis.sh
#!/bin/sh rq=`date +%Y%m%d` mkdir /mysqldata/redis/redis$rq cp -R /usr/redisdata/* /mysqldata/redis/redis$rq
4、service crond restart