如何写一个会在午夜每天运行脚本的cron?
我听说crontab是一个不错的select,但是我怎么写行,我把它放在服务器上?
这里有一个关于crontab 的好教程 ,以及如何在Ubuntu上使用它。 你的crontab行看起来像这样:
00 00 * * * ruby path/to/your/script.rb
( 00 00
表示午夜 – 0分钟和0小时,而*
表示每个月的每一天。)
句法: mm hh dd mt wd命令 毫米分钟0-59 hh小时0-23 dd月1-31日 月1-12月 第0-7周的周日(周日= 0或7) 命令:你想运行什么 所有的数值都可以用*代替,这意味着所有的数值
从手册页
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 ...
注意可以使用的特殊“昵称”(在手册页中logging),特别是“@reboot”,这是没有时间和date的select。
# 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节,手册页)。
- 使用
crontab -e -u <username>
以root身份编辑用户的crontab - 或者用
crontab -e
编辑当前用户的crontab - 您可以使用
EDITOR
环境variables设置编辑器-
env EDITOR=nano crontab -e -u <username>
- 或者为整个shell会话设置EDITOR的值
-
export EDITOR=vim
-
crontab -e
-
-
- 使用
chmod a+x <file>
可执行脚本
- 使用
-
创build一个脚本/程序作为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 <file>
可执行脚本 - 什么时候这些cron。* ly脚本运行?
- 对于RHEL / CentOS 5.x,它们在
/etc/crontab
或/etc/anacrontab
为在设定的时间运行 - RHEL / CentOS 6.x +和Fedora 17+ Linux系统只在
/etc/anacrontab
定义这个,并在/etc/cron.d/0hourly
定义cron.hourly
- 对于RHEL / CentOS 5.x,它们在
- anacron /etc/cron.*ly目录:
-
或者,可以在
/etc/cron.d
创build系统crontables。- 先前描述的crontab语法(另外提供一个用户来执行每个作业)被放入一个文件,并且该文件被放到/etc/cron.d目录中。
- 这些在系统封装(如RPM软件包)中很容易pipe理,因此通常可能是特定于应用程序的。
- 语法不同之处在于必须在时间/date字段之后以及要执行的命令之前为cron作业指定用户。
- 添加到
/etc/cron.d
的文件不需要是可执行的。 - 这是一个以用户
someuser
身份执行的示例作业,强制使用/bin/bash
作为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
设置cron作业的快速指南
创build一个新的文本文件,例如: mycronjobs.txt
对于每个日常工作(00: 00,03:45 ),将计划行保存在mycronjobs.txt中
00 00 * * * ruby path/to/your/script.rb 45 03 * * * path/to/your/script2.sh
将作业发送到cron(每次运行这个时,cron会删除已经存储的内容,并使用mycronjobs.txt中的新信息进行更新 )
crontab mycronjobs.txt
额外的有用信息
查看当前的cron作业
crontab -l
删除所有的cron作业
crontab -r
您可以通过两种方式执行shell脚本:使用cron作业或编写shell脚本
让我们假设你的脚本名是“yourscript.sh”
首先检查脚本的用户权限。 使用下面的命令来检查脚本的用户权限
ll script.sh
如果脚本在根目录下,则使用下面的命令
sudo crontab -e
其次如果脚本持有用户“ubuntu”,则使用下面的命令
crontab -e
在你的crontab中添加以下行:
55 23 * * * /path/to/yourscript.sh
另一种方法是编写一个脚本并在背景中运行它
这里是脚本,你必须把你的脚本名称(例如: – youscript.sh)每天晚上23:55运行
#!/bin/bash while true do /home/modassir/yourscript.sh sleep 1d done
将其保存在一个文件中(让它命名为“every-day.sh”)
睡1天 – 意味着它等待一天,然后再次运行。
现在授予您的script.use以下命令的权限: –
chmod + x every-day.sh
现在,使用“nohup”在后台执行这个shell脚本。 即使从会话中注销后,这也会继续执行脚本。
使用下面的命令来执行脚本。
nohup ./every-day.sh&
注意: – 每天下午23:55运行“yourscript.sh”,你必须在23:55 pm执行“every-day.sh”脚本。