使用crontab定时任务

本文深入探讨了Cron作业调度的基本概念、语法、常用命令及其应用实例,包括如何编辑、启动、关闭、重启服务,以及如何创建复杂的定时任务。通过具体的Cron表达式示例,展示了如何实现按分钟、小时、日期、月份、周和特定时间点执行任务,为开发者提供了高效自动化任务执行的实用指南。

crontab -e  编辑


查看任务是否在运行:tail -f /var/log/syslog

出现类似的信息:

Apr 26 21:17:01 example CRON[18055]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

service crond start //启动服务  
service crond stop //关闭服务  
service crond restart //重启服务  
service crond reload //重新载入配置 

基本格式 :

*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。 


参数 :
crontab -e : 编辑时程表
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表

### 设置 Rails 应用中的 Crontab 定时任务 为了在 Rails 应用中利用 crontab 来调度任务,可以采用 `whenever` gem 或者直接编写系统的 cron 作业。以下是两种方法的具体实现: #### 使用 Whenever Gem 方法 安装并配置 `whenever` 可简化创建和管理定时任务的过程。 1. 添加 `gem 'whenever', require: false` 到项目的 `Gemfile` 中,并运行 `bundle install` 命令来安装该 gem[^2]。 2. 运行命令 `bundle exec wheneverize .` 初始化项目结构,在根目录下会生成一个名为 `config/schedule.rb` 文件用于定义计划任务。 3. 编辑 `schedule.rb` 文件以添加所需的周期性操作。例如: ```ruby every 1.day, at: '4:30 am' do runner "MyModel.some_method" end ``` 4. 更新服务器上的 crontab 表格以便反映新的更改。可以通过执行 `bundle exec whenever --update-crontab` 实现这一点。 这种方法的优点在于可以直接通过 Ruby 语法指定要执行的任务逻辑而无需关心底层 shell 脚本细节;然而需要注意的是每当触发器被激活时整个应用程序环境会被重新加载,对于高频率或复杂初始化过程可能带来性能开销。 #### 手动编辑系统级 Crontab 如果希望绕过上述提到的应用程序级别的限制,则可以选择直接修改操作系统层面的 crontab 文件来进行更细粒度控制。 1. 登录到目标机器上拥有适当权限的操作员账户。 2. 输入命令 `crontab -e` 开启当前用户的个人 crontab 配置文件编辑模式。 3. 插入如下格式的一条或多条记录(假设已知路径 `/path/to/rails/script` 是指向待调用脚本的位置): ``` */5 * * * * cd /path/to/your/app && RAILS_ENV=production bundle exec rake my_task >> log/cron.log 2>&1 ``` 4. 保存退出后即刻生效新加入的时间表项。 这种方式虽然更加灵活但也意味着开发者需要自行处理好依赖关系以及确保所有必要的库都处于可用状态。 无论采取哪种方式都应该充分测试所部署的服务端行为以确认预期功能正常运作并且不会引发意外副作用比如数据损坏等问题[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值