Linux cron表达式
Linux中的cron是一种非常重要的调度工具,可以帮助我们自动化地完成定时任务。cron表达式是cron中用于指定执行时间的重要参数,本文将介绍cron表达式的基本语法和用法。
基本语法
cron表达式由5个参数组成,分别是分、时、日、月、周。它们之间用空格分隔。
* * * * *
上面的例子表示每一分钟执行一次,它的5个参数分别表示
- 分钟(0-59)
- 小时(0-23)
- 日期(1-31)
- 月份(1-12)
- 星期(0-6,0表示周日)
除了整数表示的取值范围,还可以使用以下特殊字符:
*
:表示所有可能的值。如上例中的*
表示所有分钟。,
:表示多个取值。如0,5,10
表示0点、5点和10点。-
:表示一个区间。如1-5
表示1到5。/
:表示间隔频率。如*/5
表示每5分钟。
另外,还可以使用以下缩写表示特定的取值:
@yearly
/@annually
:每年一次,等同于0 0 1 1 *
。@monthly
:每月一次,等同于0 0 1 * *
。@weekly
:每周一次,等同于0 0 * * 0
。@daily
/@midnight
:每天一次,等同于0 0 * * *
。@hourly
:每小时一次,等同于0 * * * *
。
示例
下面给出一些cron表达式的示例。
- 每天晚上10点执行一次
0 22 * * *
- 每周三下午2点和6点各执行一次
0 14,18 * * 3
- 每隔5分钟执行一次
*/5 * * * *
高级用法
除了基本语法外,还可以使用一些高级用法来指定更加复杂的执行时间。
曜日信息
在cron表达式中,星期和日期是互斥的。也就是说,如果星期被指定为*
,那么日期就不能被指定为具体的某个数字。
不过,我们可以使用以下特殊字符来指定曜日信息:
0L
:表示每个月的最后一个周日。1L
:表示每个月的最后一个周一。2L
:表示每个月的最后一个周二。3L
:表示每个月的最后一个周三。4L
:表示每个月的最后一个周四。5L
:表示每个月的最后一个周五。6L
:表示每个月的最后一个周六。#
:表示第几个星期几。例如,第2个周日可以表示为2#0
。
示例
下面给出一些高级用法的示例。
- 每个月最后一个工作日执行一次
0 0 L * 1-5
- 每个月的第2个周一、周三、周五的12点和15点各执行一次
0 12,15 * * 1#2,3#2,5#2
实例演示
为了更好地理解cron表达式的用法,我们来演示一个实际的例子。
假设我们需要每天下午4点给特定的邮箱发送一封提醒邮件,邮件的内容包含当前日期和时间。我们可以使用Python脚本编写程序,并在Linux中使用cron定时执行。具体流程如下:
- 编写Python脚本
#!/usr/bin/env python3
import datetime
import smtplib
from email.mime.text import MIMEText
# 定义邮件内容
now = datetime.datetime.now()
msg = MIMEText("当前日期时间为:{}".format(now))
msg["Subject"] = "每日提醒"
msg["From"] = "xxx@xxx.com"
msg["To"] = "xxx@xxx.com"
# 发送邮件
s = smtplib.SMTP_SSL("smtp.xxx.com", 465)
s.login("xxx@xxx.com", "xxx")
s.sendmail("xxx@xxx.com", ["xxx@xxx.com"], msg.as_string())
s.quit()
上述脚本的功能是每次调用时获取当前日期和时间,并将其作为邮件内容发送至指定邮箱。
- 在Linux中创建cron任务
我们可以使用
crontab -e
命令打开当前用户的cron表,然后添加一个新的任务,每天下午4点执行一次我们刚刚编写的脚本。
0 16 * * * /usr/bin/env python3 /path/to/script.py
上述表达式表示在每天的16:00执行一次Python脚本/path/to/script.py
。
- 测试
等待到了指定的时间,我们可以查看指定邮箱中是否收到了相应的提醒邮件。
结论
本文详细介绍了Linux中cron表达式的语法和用法,包括基本语法和高级用法。我们还通过一个实际的例子演示了如何使用Python脚本和cron实现定时发送邮件的功能。使用cron表达式可以帮助我们更加高效地完成自动化任务,提高工作效率。