Centos 利用crontab定时执行任务及配置方法 您所在的位置:网站首页 重启crond服务 Centos 利用crontab定时执行任务及配置方法

Centos 利用crontab定时执行任务及配置方法

2023-11-30 22:52| 来源: 网络整理| 查看: 265

在centos上最常用的定时任务应该就是crontab了,有三种方式实现定时任务的方法,但是所用到的场景有所不同

at    适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。 crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现 anacron 无法周期性执行,只能以天为周期,但有个特点,在关机状态下未>执行的任务,下次开机时可以补上执行

常用的是crontab crond是什么? crond 和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。

而crond正是它的守护进程。cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务。

用户执行的定时任务(用户的定时任务一般分为六段) 1、安装 crontabs服务并设置开机自启:

$ yum install crontabs $ systemctl enable crond $ systemctl start crond

2、配置定时规则

$ vim /etc/crontab

在配置文件中配置你的定时执行规则

# 将当前时间写入到log文件,一小时执行一次 0 * * * * root echo `date` >> /root/date.log

3、保存生效

$ crontab /etc/crontab

4、查看任务

$ crontab -l

任务列表,如下所示:

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 * * * * root echo `date` >> /root/date.log

到此定时任务配置完成。

crond常用命令

/bin/systemctl start crond /bin/systemctl stop crond /bin/systemctl restart crond /bin/systemctl reload crond /bin/systemctl status crond

以上1-5行分别为启动、停止、重启服务和重新加载配置、查看服务状态 把cron设为在开机的时候自动启动

vi /etc/rc.local /bin/systemctl start crond.service

crontab常用命令

crontab -u //设定某个用户的cron服务 crontab -l //列出某个用户cron服务的详细内容 crontab -r //删除某个用户的cron服务 crontab -e //编辑某个用户的cron服务 crontab -i //打印提示,输入yes等确认信息 /var/spool/cron/root (以用户命名的文件) 是所有默认存放定时任务的文件, /etc/cron.deny 该文件中所列出用户不允许使用crontab命令 /etc/cron.allow 该文件中所列出用户允许使用crontab命令,且优先级高于/etc/cron.deny /var/log/cron 该文件存放cron服务的日志,可以用tail -f /var/log/cron.log观察 在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。

三种编辑定时任务的方式 定时任务格式

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 用户的定时任务分6段,分别是:分,时,日,月,周,命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 *:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分 -:表示区间,是一个范围,00 17-19 * * * cmd,就是每天17,18,19点的整点执行命令 ,:是分割时段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令 /n:表示分割,可以看成除法,*/5 * * * * cmd,每隔五分钟执行一次

在这里插入图片描述 **第一种:**在/etc/crontab下设置,指定用户名的(不专业写法,一般不写在这里面) 1、vim命令进入/etc/crontab 2、在最后一行加上 59 23 * * * root /root/catalina.out.rm/rm_8080_8081_catalina.sh 如下说明: 在这里插入图片描述 3、重启crontab,使配置生效 sudo /bin/systemctl restart crond.service 第二种:直接用crontab -e,不需要指定用户,如果是root权限,默认是root定时的 1、crontab -e进入 在这里插入图片描述

2、:wq退出保存 3、查看上面那个脚本是否有执行权限 在这里插入图片描述 4、还要看脚本里面的涉及的操作文件是否有权限 5、重启crontab,使配置生效 sudo /bin/systemctl restart crond.service 在这里插入图片描述 第三种:直接写入/var/spool/cron/root(是用户名称) 1.vi /var/spool/cron/root 在这里插入图片描述 2.保存退出,crontab -l 在这里插入图片描述 3.tail -f /tmp/log.log 在这里插入图片描述 如果你执行了以上两种方式,你再进来看一下这个目录下的文件你可能会发现一点问题 这里的文件都是以用户名来命名的,你再打开你使用crontab -e 添加过任务的用户文件,原来crontab -e编辑的就是这里的文件,所以我们如果需要为哪个用户添加任务,只用编辑这个目录下对应用户的文件即可 实例

1)30 21 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每晚的21:30重启apache。 2)45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每月1、10、22日的4 : 45重启apache。 3)10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每周六、周日的1 : 10重启apache。 4)0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。最后一次的任务执行时间为23:30 5)0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每星期六的11 : 00 pm重启apache。 6)* */1 * * * /usr/local/etc/rc.d/lighttpd restart 每一小时重启apache(错误的) *代表每分钟就执行一次,上面的语句的意思为每隔一小时的每分钟都在执行重启apache */60 * * * * #每60分钟即每小时执行一次 */105 * * * * #每105分钟执行一次 7)* 23,00-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 晚上11点到早上7点之间,每隔一小时重启apache(错误的) 上面的定时任务的分钟为*号,代表每分钟都在执行,表示晚上23点和凌晨0-7点之间每隔一小时的每分钟都在再行重启apache 8)0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 每月的4号与每周一到周三的11点重启apache(周和日尽量不要同时使用) 9)0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 一月一号的4点重启apache * * * * * 每1分钟执行一次 15,30,45 * * * * 每小时的第15、30、45分执行 15,30 10-11 * * * 在上午10点到11点的第15和第30分钟执行 * */2 * * * 每两个小时执行一次 # 将当前时间写入到log文件,一小时执行一次 0 * * * * root echo `date` >> /root/date.log

相关文件

#该文件中所列用户不允许使用crontab命令 /etc/cron.deny # 该文件中所列用户允许使用crontab命令 /etc/cron.allow #所有用户crontab文件存放的目录,以用户名命名 /var/spool/cron/ # crond日志文件 /var/log/cron

个人测试中的问题 1、关于重新加载配置文件

根据网上说的修改配置文件之后需要重新加载配置文件或者重启crond才能生效,测试过程中发现只要修改了配置文件即可生效,无需使用systemctl reload crond加载

2、crond报错 (CRON) DEATH (can’t lock /var/run/crond.pid, otherpid may be 8138): Resource temporarily unavailable

解决的各种姿势 1、杀掉所有crond进程,然后重启crond服务 2、检查你写的配置文件是否有错

crontab定时任务执行不成功

1.查看定时任务有没有开启 2.符号*号是否弄懂,是否写错,代表每一分钟,小时,日,月,周 3.执行权限等等 4.执行的脚本或者写入文件的目录是否存在,是否是绝对路径 5.是否有系统变量,定时任务对系统变量的识别很少,比如写个tomcat定时关机,手工ok,但是脚本就是不执行 6.命令放定时任务里面,时间的%必需要转义\% 7.多看定时任务日志 8.企业故障案例一(https://www.cnblogs.com/p0st/p/9720120.html)

windows定时任务 所有程序->附件->系统工具->计划任务程序 邮件单击【任务计划程序库】->【创建基本任务】 在这里插入图片描述

转自: https://www.cnblogs.com/p0st/p/9482167.html https://www.cnblogs.com/SunArmy/p/13096861.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有