2010-10-21 86 views

回答

227

Here's a good tutorial关于crontab是什么以及如何在Ubuntu上使用它。你的crontab行会是这个样子:(00 00表示午夜 - 0分钟以及0小时 - 和*什么恶意每个月的每一天)

00 00 * * * ruby path/to/your/script.rb 

 
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 
+1

难道你不想错过'用户运行'专栏吗? – 2015-01-12 22:55:23

+3

@LucasCimon'/ etc/crontab'(在Ubuntu上)允许用户列(在命令前面),但是当你运行'crontab -e'时,你正在编辑一个特定于用户的crontab,请允许此列。 IIRC Ubuntu不鼓励手动退出'/ etc/crontab',因为它可能被覆盖。看到这里:http://stackoverflow.com/questions/8475694/how-to-specify-in-crontab-by-what-user-to-run-script – 2015-01-13 07:30:48

+0

@Jordan所以对根的crontab的答案是'sudo crotab -u root -e' – dashesy 2017-01-10 21:55:48

36

从手册页

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作业,你可以做的三两件事之一:

  1. 添加一个命令到用户的crontab,如上图所示(从crontab中,第5,人页)。

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


  • 创建脚本/程序作为cron作业,并把它添加到系统中的anacron的/etc/cron.*ly目录

    • anacron的/etc/cron.*ly目录:
      • /etc/cron.daily
      • 的/ etc/cron的。每小时
      • /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限定于此,并且限定cron运行。每小时在/etc/cron.d/0hourly

  • 或者,可以在/etc/cron.d中创建系统crontables。

    • 先前描述的crontab语法(以另外提供用户执行每个作业为)放入一个文件,并且该文件被放入/etc/cron.d中目录。
    • 这些在系统打包(例如RPM软件包)中很容易管理,因此通常可能是特定于应用程序的。
    • 语法不同之处在于必须在时间/日期字段之后以及要执行的命令之前为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 
    
    3

    快速指南设置一个cron作业

    创建一个新的文本文件,例如: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 
    
    +0

    您的crontab语法对于03:45不正确。 crontab字段为分钟然后小时,即“45 03” - 你的帖子中有后退。 – 2014-10-14 20:47:47

    +0

    感谢您的注意!更新 :) – dyltini 2014-10-16 10:11:42

    5

    有时你需要指定路径和使用crontab和rv的GEM_PATH米

    像这样:

    # top of crontab file 
    PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/[email protected]/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/[email protected] 
    
    # 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 
    
    0

    可以,或者通过使用cron作业或通过编写shell脚本

    让我们假设你的脚本名称有两种方式执行shell脚本“yourscript.sh”

    首先检查脚本的用户权限。下面命令 使用检查脚本的用户权限

    LL script.sh

    如果脚本是在根,则使用下面的命令

    须藤的crontab -e

    其次,如果脚本拥有用户“ubuntu”,则使用以下命令:

    cr ontab -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”)

    睡眠1D - 意味着它等待一天,然后再次运行。

    现在请允许您script.use以下命令: -

    使用chmod + X every-day.sh

    现在,通过使用 “nohup的” 在后台执行这个shell脚本。 即使从会话中注销后,这样也会继续执行脚本。

    使用下面的命令来执行脚本。

    nohup的./every-day.sh &

    注: - 运行 “yourscript.sh” 23时55分日常,你正好23执行 “every-day.sh” 脚本:55pm。