首页 > 编程知识 正文

linux每天定时任务,定时器cron表达式

时间:2023-05-03 06:38:16 阅读:164857 作者:3912

作用:

crond是linux定期执行程序时使用的命令。 操作系统安装完成后,缺省情况下将启动此任务调度命令

crond命令每分钟检查是否有作业定期运行,如果有,它会自动运行

linux系统的定时任务调度工作主要分为两类:

系统执行的任务--系统定期执行的任务,例如轮询系统日志、备份系统数据和清理系统缓存

[ root @ root~~ ] # ll/var/log/messages *-- rw-- rw---1 root root 149 feb 2115336011/var/log/messages-rw-- VW messages-2021 01 31-rw---1 root root 578536 feb 141:32/var/log/messages-2021 02 14-rw---var/log/messsag 例如,每5分钟与互联网上的时间服务器进行时间同步,每10分钟检查邮件服务器上有无新到的消息。 这些工作由用户自己设定

相同软件种类:

利用cronie实现定时任务功能利用atd实现定时任务功能利用anacron实现定时任务功能只需设定一次即可,常用于家用电脑的非7*24服务器

Linux crond时间任务包

使用# yumprovidescrondoryumprovidescrondtab查找定时任务命令属于哪个软件工具包[ root @ root~] # yumprovidescrontab #工具包名称crontab [ root @ root~] # yum provides */crontab #由于搜索尚未成功,因此建议您优化yum源以扩展yum源。 #根据搜索到的包名称检查是否安装了cronie软件[ root @ root~] # rpm-qacroniecrooniecroooot显示包中的所有文件信息[ rroot @ root~] cron.d/etc/cron.d/0 hourly/etc/cron.deny/etc/PAM.d/cron.d/cam systemd/system/crond.serverve share/doc/cron ie usr/share/doc/cron ie-1.4.11/changelog/usr/share/doc/cron ie-1.4.11/install /

常用相关配置文件介绍(有的目录属于系统有的目录属于cronie软件包中):

/var/spool/cron/目录存储crontab任务配置文件,每个用户都包含一个root,每个配置文件都会创建一个用户名命令

名为/etc/crontab的文件用于调度各种管理和维护任务

/etc/cron.d/此目录用于存储要执行的crontab文件或脚本

/etc/cron.deny crontab限制用户权限,使用crontab的用户无法写入。 未写入的用户可以使用crontab

/etc/cron.allow crontab限制用户权限,使用crontab的用户可以对其进行写入。 未写入的用户不能使用crontab

当ps: cron.deny和cron.allow都存在时,忽略cron.deny的内容,cron.allow文件的权限大于cron.deny

系统计划任务周期:每小时控制计划任务目录:/etc/cron.hourly

系统计划任务周期:每日控制计划任务目录:/etc/cron.daily 00:00-2:59

系统计划任务周期:每周控制计划任务目录:/etc/cron.weekly 7天

计划任务周期:每月控制计划任务的目录:/etc/cron.mo

nthly 30 28 31

 

定时任务crond支持两种实现方式:

1. 直接编写计划任务

2. 使用目录的方式,放在指定的目录都会定时执行

 

crontab命令及参数:

crontab [-u user] file

crontab [-u user] [-l | -r | -e] [-i] [-s]

常用参数:

-l 查看crontab文件内容

-e 编辑crontab文件内容

-r 移出所有crontab文件内容(如果只删除某个,用-e编辑即可)

-i 配合-r参数使用,在移出所有crontab文件内前提示是否删除

提示:

1. crontab{-l | -e}实际上就是在操作/var/spool/cron/当前用户这样的文件

2. 在crontab命令中只有"绝对路径",不存在相对路径,执行任何命令都需要写绝对路径 (which 命令 -- 查看命令绝对路径)

 

定时任务直接编辑

crontab -e

#执行命令后直接进入vi编辑界面 每一行都是单独一项工作

 

编写语法规范:

[root@root ~]#cat /etc/crontab SHELL=/无情的咖啡豆/bashPATH=/s无情的咖啡豆:/无情的咖啡豆:/usr/s无情的咖啡豆:/usr/无情的咖啡豆MAILTO=rootHOME=/# 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

 

crontab基本格式

* * * * * cmd

分 时 日 月 周 需要执行的命令

代表意义

分钟

小时

日期

月份

命令

数字范围

0~59

0~23

1~31

1~12

0~7

需要执行的命令

周 -- 0或7都代表"星期天"的意思。

 

特殊字符

代表含义

*

星号代表任何时刻,就是“每”的意识。取值范围所有数字

举例: 00 01 * * * cmd 表示每天的01点执行命令

,

逗号代表分割时段。

举例: 30 09,10 * * * cmd 表示每天的9点30分和10点分执行命令

-

减号代表一个时间范围段。

举例: 20 09-12 * * * cmd 表示每天的9点到12点的20分(9点20|10点20|11点20|12点20)执行命令

/n

n代表数字范围内的数字,即每隔n单位间隔的意识,例如每隔15分钟:*/15 * * * * cmd

举例: 15 */3 * * * cmd 表示每隔3小时的15分钟执行命令

 

实践应用:

#查看crond是否开启及开机自启动#centos6[root@root ~]#service crond statuscrond (pid 1038) is running...[root@centos6-003 ~]#chkconfig --listabrt-ccpp 0:off1:off2:off3:on4:off5:on6:offabrtd 0:off1:off2:off3:on4:off5:on6:offauditd 0:off1:off2:on3:on4:on5:on6:offcrond 0:off1:off2:on3:on4:on5:on6:off#centos7systemctl status crond#查看定时任务[root@centos6-003 ~]#crontab -l#每两分钟执行一次echo命令 */2 * * * * echo "crontad定时任务执行"#通过日志或邮件信息查看定时任务是否执行[root@root ~]#tail -5 /var/log/cronFeb 21 19:42:01 centos6-003 CROND[2162]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:44:01 centos6-003 CROND[2169]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:46:01 centos6-003 CROND[2176]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:48:01 centos6-003 CROND[2183]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:50:01 centos6-003 CROND[2191]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")[root@root ~]#tail -10 /var/spool/mail/rootX-Cron-Env: <SHELL=/无情的咖啡豆/sh>X-Cron-Env: <HOME=/root>X-Cron-Env: <PATH=/usr/无情的咖啡豆:/无情的咖啡豆>X-Cron-Env: <LOGNAME=root>X-Cron-Env: <USER=root>Message-Id: <20210221115201.D5AADC1467@root.localdomain>Date: Sun, 21 Feb 2021 19:52:01 +0800 (HKT)crontad定时任务执行#crontad定时任务正常执行后创建一个脚本再进行测试[root@root ~]#cat /tmp/crondTest.sh #!/无情的咖啡豆/bashtouch crondTest_`date +%F-%H-%M`.txt#编写定时任务[root@root ~]#crontab -e#查看编写的定时任务[root@root ~]#crontab -l#每两分钟执行一次echo命令 */2 * * * * echo "crontad定时任务执行"#每隔一分钟执行crondTest.sh*/3 * * * * /无情的咖啡豆/sh /tmp/crondTest.sh#通过日志和邮件查看是否执行*/3 * * * * echo "crontad定时任务执行"

 

定时任务排查方法:

#检查定时任务配置文件是否存在[root@root ~]#cat /var/spool/cron/root #每两分钟执行一次echo命令 */2 * * * * echo "crontad定时任务执行"#每隔一分钟执行crondTest.sh*/3 * * * * /无情的咖啡豆/sh /tmp/crondTest.sh#查看定时任务日志文件[root@root ~]#tail -3 /var/log/cronFeb 21 20:18:01 root CROND[2409]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 20:20:02 root CROND[2420]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 20:21:01 root CROND[2427]: (root) CMD (/无情的咖啡豆/sh /tmp/crondTest.sh)执行时间 主机名 定时任务执行PID 用户名 执行命令#打印信息到屏幕上的定时任务可以查看邮件[root@root ~]#tail -5 /var/spool/mail/root Message-Id: <20210221122801.BBF4BC1467@root.localdomain>Date: Sun, 21 Feb 2021 20:28:01 +0800 (HKT)crontad定时任务执行

 

编写定时任务的注意事项:

1) 编写定时任务要有注释说明

2) 定时任务命令或程序写到脚本里执行

3) 命令和文件使用绝对路径

4) 编写定时任务,结尾加 > /dev/null 2>&1 可以将输出到屏幕上的信息保存到黑洞中,避免占用磁盘空间

5) 指定用户下执行相关定时任务

6) 生产任务程序尽量不要产生屏幕输出信息

注: 定时任务中执行命令,如果产生输出到屏幕的信息,都会以邮件方式告知用户

/var/spool/mail/root 不断变大占用磁盘空间 占用的block空间

解决方法: 将邮件服务关闭

centos6: service postfix stop

centos7: systemctl stop postfix

/var/spool/postfix/maildrop/ 不断产生小文件占用磁盘空间 占用的inode空间

解决方法: 删除小文件

rm -f /var/spool/postfix/maildrop/*

systemctl start postfix

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。