如何写一个会在午夜每天运行脚本的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作业,您可以执行以下三件事之一:

  1. 将命令添加到用户的crontab,如上所示(以及从crontab,第5节,手册页)。

    • 使用crontab -e -u <username>以root身份编辑用户的crontab
    • 或者用crontab -e编辑当前用户的crontab
    • 您可以使用EDITOR环境variables设置编辑器
      • env EDITOR=nano crontab -e -u <username>
      • 或者为整个shell会话设置EDITOR的值
        1. export EDITOR=vim
        2. crontab -e
    • 使用chmod a+x <file>可执行脚本

  1. 创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

  1. 或者,可以在/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”脚本。