crond

  • 设置 crontab 开机自启:

systemctl enable crond

  • cron是服务名称

  • crond是后台进程

  • crontab是计划任务表

  • /etc目录下有一个crontab 文件,这个就是系统任务调度的配置文件

cron服务

  • cron是一个 Liunx 下 的定时执行工具,可以在无需人工干预的情况下运行作业。
systemctl start  crond    //启动服务
systemctl stop  crond     //关闭服务
systemctl restart  crond  //重启服务
systemctl reload  crond   //重新载入配置
systemctl status  crond   //查看服务状态 
  • 在crontab文件中如何输入需要执行的命令和时间。
  • 该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
  • 每个域之间使用空格或者制表符分隔。

创建cron脚本

  • 写cron脚本文件,命名为 mysqlRollBack.cron
  • 15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt 表示,每隔15分钟,执行打印一次命令
  • 添加定时任务。执行命令 “crontab crontest.cron”。
  • "crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本

注意:这操作是直接替换该用户下的crontab,而不是新增

  • crontab file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

  • crontab [-u user] -e:编辑某个用户的crontab文件内容。默认表示编辑当前用户的crontab文件内容。

  • crontab [-u user] -l:显示某个用户的crontab文件内容。默认显示当前用户的crontab文件内容。

  • crontab [-u user] -[i]r:从/var/spool/cron目录中删除某个用户的crontab文件,默认删除当前用户的crontab文件。-i参数指定在删除用户的crontab文件时是否给确认提示。

  • 特殊字符:

    • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作;
    • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
    • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
    • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
  • 使用示例:

每周末,凌晨1-5点,每隔10分钟执行一次auto-del-log.sh,日志输出到auto.log

*/10 1-5 * * 6,7 cd /data/prod/kafka_connect_tongji/logs; ./auto-del-log.sh >> auto.log 2>&1

1表示标准输出,stdout2表示标准错误,stderr2>&1 的意思就是将标准错误重定向到标准输出

linux中 > 表示覆盖原文件内容,**>>**表示追加内容。

格式说明
*/1 * * * * service httpd restart每一分钟 重启httpd服务
0 */1 * * * service httpd restart每一小时 重启httpd服务
30 21 * * * service httpd restart每天 21:30 分 重启httpd服务
26 4 1,5,23,28 * * service httpd restart每月的1号,5号 23 号 28 号 的4点26分,重启httpd服务
26 4 1-21 * * service httpd restart每月的1号到21号 的4点26分,重启httpd服务
*/2 * * * * service httpd restart每隔两分钟 执行,偶数分钟 重启httpd服务
1-59/2 * * * * service httpd restart每隔两分钟 执行,奇数 重启httpd服务
0 23-7/1 * * * service httpd restart每天的晚上11点到早上7点 每隔一个小时 重启httpd服务
0,30 18-23 * * * service httpd restart每天18点到23点 每隔30分钟 重启httpd服务
0-59/30 18-23 * * * service httpd restart每天18点到23点 每隔30分钟 重启httpd服务
  • 服务器定时每天凌晨3:00自动重启。
[root@osvue ~]# crontab -e
* 3 * * * /usr/sbin/reboot
[root@osvue ~]# systemctl restart crond
  • 每隔10分钟定时备份/var/log/httpd下的日志文件,并将其保存至httpbackuplog目录中。
[root@osvue cron.d]# touch httpbackuplog.sh
[root@osvue cron.d]# vim httpbackuplog.sh
#!/bin/bash
logusr="/var/log/httpd"
if [ ! -d "$httpbackuplog"];then
mkdir /httpbackuplog
fi
cd $logusr
tar -cvzf $(date+"%Y""%m""%d""%H""%M")httpdlog.tar.gz*
mv $(date+"%Y""%m""%d""%H""%M")httpdlog.tar.gz/httpbackuplog
[root@osvue cron.d]#
[root@osvue cron.d]# crontab -e
*/10 * * * * /etc/cron.d/httpbackuplog.sh
[root@osvue cron.d]# systemctl restart crond 

示例

首先需要执行 crondtab -e 启用编辑。

  • 每天凌晨 1:30 分重启 docker 服务:

    30 1 * * * systemctl restart docker.service
    
  • 每月 1、10、20 日的 23:59 重启 docker 服务:

    59 23 1,10,20 * * systemctl restart docker.service
    
  • 每月 1 到 10 日的 4:45 重启 docker 服务:

    45 4 1-10 * * systemctl restart docker.service
    
  • 每隔两分钟重启 docker 服务:

    */2 * * * * systemctl restart docker.service
    
  • 每月 10 到 20 日每隔两日的 4:45 重启 docker 服务:

    45 4 10-20/2 * * systemctl restart docker.service
    
  • 晚上 11 点到早上 7 点之间每隔一个小时重启 docker 服务:

    0 23-7/1 * * * systemctl restart docker.service