cron job (crontab)

本文详细介绍了Magento系统中计划任务(cronjob)的功能及其重要性,包括如何设置cronjob以实现如自动发送新闻邮件等功能,同时还提供了cronjob定时器语法的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cron job的时间格式 :* * * * *  分别对应 分、小时、日、月、星期

所以 */5 * * * * 表示5分钟

 

计划任务(cron job)是Magento系统中一个很有用甚至可以说必须使用的功能,而最近在网上跟人聊天发现很多Magento的使用者不知道这个功能或者知道却认为可有可无,我在这里建议各位Magento的使用者,把这个功能使用起来吧。

            在之前关于Newsletter的那篇博文我有讲到,要使新闻能按设定的时间自动发送,就必须设置好计划任务(cron job)。计划任务(cron job)简单的来说就是在系统中每隔一段时间来重复操作一件事,比如每隔多少时间清理日志,比如每天提交Sitemap给google等等。

而要设置计划任务(cron job),需要在网站运行的服务器(以linux为例)写一段脚本来定时调用网站根目录下的cron.php文件。下面是我自己使用的服务器的设置方式:

 

           

[c-sharp] view plaincopy

1.  crontab */5 * * * * /usr/bin/php -f /home/yourdomainname/public_html/cron.php  

 

 

         当然,首先你的服务器得支持cron job你才能使用crontab 这个命令,设置完的效果是服务器每隔5分钟运行一次你的网站根目录下的cron.php文件,cron.php运行时会去检查计划任务时间表中哪些任务的预定时间已经到了,如果到了就立即执行预定的任务,比如提交sitemap,并同时根据各个任务的配置文件或预先设定的任务(特指newsletter)生成新的计划任务时间表。储存这些数据的是数据库中的cron_schedule表,进这个表你会看到一个计划任务的列表

 

            要让某个功能按时运行需要在对应的config.xml中设置计划任务,指定要运行的某个类的某个方法,同样以google sitemap为例

 

        

[xhtml] view plaincopy

1.  <crontab>  

2.         <jobs>  

3.             <sitemap_generate>  

4.                 <run>  

5.                     <model>sitemap/observer::scheduledGenerateSitemaps</model>  

6.                 </run>  

7.             </sitemap_generate>  

8.         </jobs>  

9.     </crontab>  

 

        你可以在Sitemap/Model/Observer.php文件中找到scheduledGenerateSitemaps这个方法,这个方法的作用就是向google提交sitemap。同理当你自己的模块有需要定时运行的功能是,可以参照sitemap在自己的config.xml配置要执行的方法。

 

这里我们再来了解一下 cron job 中的定时器语法

标签中的 5 颗 * 分别代表:

# — M: 分钟 (0 - 59) # | — H:小时 (0 - 23) # | | — D:一个月的哪一天 (1 - 31) # | | | — M: 一年中的哪个月 (1 - 12) # | | | | — 星期几(0 - 7) (星期日 = 0或7) # | | | | | # * * * * * 被执行的命令

 

 

 

 

 

 

# — M: 分钟 (0 - 59)

# | — H:小时 (0 - 23)

# | | — D:一个月的哪一天 (1 - 31)

# | | | — M: 一年中的哪个月 (1 - 12)

# | | | | — 星期几(0 - 7) (星期日 = 0或7)

# | | | | |

# * * * * * 被执行的命令

另外还有几个特殊的符号就是 “*” | “/” | “-” | “,”

星号 (‘*’) 代表任何可能的值。例如,在“小时域” 里的星号等于是“每一个小时”
斜线 (‘/’) 用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数
连词符 (‘-‘) 制定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”
逗号 (‘,’) 分开的值,例如:“1,3,4,7,8”

示例:

下面的计划任务会每一分钟执行

* * * * * [command] or */1 * * * * [command] or 0-59 * * * * [command]

 

 

 

 

* * * * * [command]

or

*/1 * * * * [command]

or

0-59 * * * * [command]

下面的计划任务会在每个小时的0分时运行(就是每小时执行一次)

0 * * * * [command]

 

0 * * * * [command]

下面依旧是一个每小时运行一次的计划任务。不过是在每个小时的一刻钟时运行的(1:15,2:15 …以此类推)

15 * * * * [command]

 

15 * * * * [command]

下面的计划任务每天执行一次,在2:30分

30 2 * * * [command]

 

30 2 * * * [command]

下面的计划任务是在每个月2号的午夜执行(比如:2013-01-02 00:00, 2013-02-02 00:00 …以此类推)

0 0 2 * * [command]

 

0 0 2 * * [command]

下面的计划任务会在每周一的每个小时0分钟时执行一次

0 * * * 1 [command]

 

0 * * * 1 [command]

下面的会每小时运行3次,在0分,10分,和20分时

0,10,20 * * * * [command]

 

0,10,20 * * * * [command]

下面是用除号 / 表示每多少运行一次。本例是每5分钟运行一次

*/5 * * * * [command]

 

*/5 * * * * [command]

还可以用 – 表示一个范围,如下表示5到10点的每个整点运行一次

0 5-10 * * * [command]

 

0 5-10 * * * [command]

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 [command]

 

0 11 4 * 1-3 [command]

晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * * [command]

 

0 23-7/2,8 * * * [command]

另外还有一个特殊的时间关键字“@reboot”,就是每次重启服务器时运行计划任务

@reboot [command]

 

@reboot [command]

关于 Cron 的一些知识 – 使用PHP解析器

CGI脚本默认是可以执行的,但是php脚本不行,他们需要用php解析器来运行,这就是我们要把php解析器的路径放到php脚本前的原因。

注释使用#字符。例如:

# This cron job does something very important 10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

 

# This cron job does something very important  

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

设定E-mail

MAILTO="shawn0828@hotmail.com" # This cron job does something very important 10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

 

 

MAILTO="shawn0828@hotmail.com"  

# This cron job does something very important  

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

有时候php解析器可能在这里”/usr/local/bin/php”。我们可以用下面的命令找到正确的路径:

在终端中输入: which php
系统反馈: /usr/bin/php

 

转载于:https://my.oschina.net/ganfanghua/blog/1613619

<think>好的,我需要回答用户关于如何配置和运行CronJob的问题。首先,用户提到了Kubernetes中的CronJob,所以该先确认他们指的是Kubernetes的CronJob还是传统的Unix cron作业。根据用户提供的引用内容,有使用kubectl命令的示例,比如“kubectl get cronjob hello”[^1],这表明用户可能是在询问Kubernetes环境下的CronJob配置。 接下来,我需要整理Kubernetes CronJob的基本概念和配置步骤。首先解释什么是CronJob,然后说明如何创建和配置,包括YAML文件的编写,例如指定schedule、jobTemplate等部。同时需要提到常用的命令,如创建、查看状态、查看日志等,这些命令对于用户管理CronJob非常重要。 然后,考虑到用户可能也需要了解传统的Unix cron作业,虽然引用中没有提到,但为了全面性,可以简要对比一下两者的区别,并给出基本的crontab配置方法。例如,编辑crontab文件添加时间表达式和命令,以及如何重启cron服务等步骤。 还要注意用户示例中提到的引用标记,需要将提供的引用内容自然地融入到回答中。例如,当提到查看CronJob状态时,引用中的命令,或者在讨论环境变量配置时提及引用[^2]中的例子。 另外,用户要求生成相关问题,所以需要列出几个相关的扩展问题,帮助用户进一步学习。例如,如何调试失败的CronJob,或者如何设置并发策略等。 最后,确保整个回答结构清晰,点说明,语言简洁,符合用户要求的中文回答,并且正确使用LaTeX格式的数学表达式(虽然在这个主题中可能用不上,但如果有涉及变量的地方需要留意)。同时检查是否有遗漏的引用,确保每个引用标记对正确的内容。</think>### 如何配置和运行 CronJob? #### 1. **CronJob 基本概念** CronJob 是 Kubernetes 中用于定时执行任务的资源对象,类似于传统系统的 cron 服务。它通过定义时间表(schedule)和任务模板(jobTemplate)来实现周期性任务。 #### 2. **配置 Kubernetes CronJob** ##### (1) 编写 YAML 文件 ```yaml apiVersion: batch/v1 kind: CronJob metadata: name: example-cronjob spec: schedule: "*/5 * * * *" # 每5钟执行一次(cron表达式) jobTemplate: spec: template: spec: containers: - name: example-container image: busybox command: ["/bin/sh", "-c", "echo Hello from CronJob"] restartPolicy: OnFailure ``` - **`schedule`**:使用 cron 表达式定义执行时间,例如 `0 * * * *` 表示每小时整点执行。 - **`jobTemplate`**:定义 Job 的配置,包括容器镜像和命令。 ##### (2) 创建 CronJob ```bash kubectl apply -f cronjob.yaml ``` 通过 `kubectl` 提交 YAML 文件到 Kubernetes 集群。 ##### (3) 查看状态 ```bash kubectl get cronjob example-cronjob # 查看基本信息 kubectl describe cronjob example-cronjob # 查看详细状态和事件 ``` #### 3. **传统 Unix cron 作业配置** 对于非 Kubernetes 环境,可通过 `crontab` 配置: ```bash crontab -e # 编辑当前用户的 cron 任务 ``` 添加一行任务(例如每天凌晨备份): ``` 0 2 * * * /path/to/backup_script.sh ``` - **时间格式**:`钟 小时 日 月 周 命令` - 使用 `systemctl restart cron` 重启服务生效。 #### 4. **调试与日志** - **Kubernetes**:查看 Pod 日志: ```bash kubectl logs <pod-name> ``` - **传统 cron**:日志通常位于 `/var/log/syslog`,或重定向输出到文件: ``` * * * * * /path/to/script.sh >> /var/log/cron.log 2>&1 ``` #### 5. **常见问题** - **时间表达式错误**:确保 cron 表达式语法正确,可用工具验证(如 [crontab.guru](https://crontab.guru))。 - **权限问题**:传统 cron确保脚本有执行权限(`chmod +x script.sh`)。 - **环境变量**:cron 默认环境可能与用户 Shell 不同,建议脚本中显式设置环境变量[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值