我听说过crontab是一个不错的选择,但是如何编写该行以及我将它放在服务器上的哪个位置?
这是一个关于crontab是什么以及如何在Ubuntu上使用它的好教程.你的crontab行看起来像这样:
00 00 * * * ruby path/to/your/script.rb
(00 00
表示午夜 - 0分0小时 - *
s表示每个月的每一天.)
Syntax: mm hh dd mt wd command mm minute 0-59 hh hour 0-23 dd day of month 1-31 mt month 1-12 wd day of week 0-7 (Sunday = 0 or 7) command: what you want to run all numeric values can be replaced by * which means all
从手册页
linux$ man -S 5 crontab cron(8) examines cron entries once every minute. The time and date fields are: field allowed values ----- -------------- minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sun, or use names) ... # run five minutes after midnight, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 ...
值得注意的是可以使用的特殊"昵称"(在手册页中记录),尤其是"@reboot",它没有时间和日期替代方案.
# Run once after reboot. @reboot /usr/local/sbin/run_only_once_after_reboot.sh
您还可以使用此技巧每分钟多次运行您的cron作业.
# Run every minute at 0, 20, and 40 second intervals * * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh * * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh * * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
要添加cron作业,您可以执行以下三种操作之一:
将命令添加到用户的crontab,如上所示(并从crontab,第5节,手册页).
用root编辑用户的crontab crontab -e -u
或者用just编辑当前用户的crontab crontab -e
您可以使用EDITOR
环境变量
设置编辑器
env EDITOR=nano crontab -e -u
或者为整个shell会话设置EDITOR的值
export EDITOR=vim
crontab -e
使脚本可执行 chmod a+x
创建一个脚本/程序作为cron作业,并将其添加到系统的anacron /etc/cron.*ly
目录中
anacron /etc/cron.*ly目录:
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly中
/etc/cron.weekly文件
如:
/etc/cron.daily/script_runs_daily.sh
chmod a+x /etc/cron.daily/script_runs_daily.sh
- 使其可执行
另请参阅anacron手册页: man anacron
使脚本可执行 chmod a+x
什么时候这些cron.*ly脚本运行?
对于RHEL/CentOS 5.x,它们被配置为/etc/crontab
或/etc/anacrontab
在设定的时间运行
RHEL/CentOS 6.x +和Fedora 17+ Linux系统只定义了这个/etc/anacrontab
,并定义了cron.hourly/etc/cron.d/0hourly
或者,可以创建系统crontables /etc/cron.d
.
先前描述的crontab语法(另外提供用户执行每个作业)被放入文件中,文件被放入/etc/cron.d目录中.
这些在系统包装(例如RPM包)中易于管理,因此通常可能是特定于应用的.
语法差异是必须在时间/日期字段之后和执行命令之前为cron作业指定用户.
添加的文件/etc/cron.d
不需要是可执行的.
这是一个以用户身份执行的示例作业someuser
,并/bin/bash
强制使用shell作为shell.
File: /etc/cron.d/myapp-cron # use /bin/bash to run commands, no matter what /etc/passwd says SHELL=/bin/bash # Execute a nightly (11:00pm) cron job to scrub application records 00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
有时您需要使用crontab和rvm指定PATH和GEM_PATH.
像这样:
# top of crontab file PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$ GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global # jobs 00 00 * * * ruby path/to/your/script.rb 00 */4 * * * ruby path/to/your/script2.rb 00 8,12,22 * * * ruby path/to/your/script3.rb