如何编写将在每天午夜运行脚本的cron?


Answers:


261

这是一个很好的教程,介绍了什么是crontab以及如何在Ubuntu上使用它。您的crontab行将如下所示:

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

00 00表示午夜--0分钟和0小时*-s表示每月的每一天。)

句法: 
  mm hh dd mt wd命令

  毫米分钟0-59
  时数0-23
  1-3月dd日
  mt月1-12
  wd星期几0-7(星期日= 0或7)
  命令:您要运行什么
  所有数值都可以用*代替,表示所有

1
您是否想念“以用户身份运行”列?
卢卡斯·西蒙

4
@LucasCimon /etc/crontab(在Ubuntu上)允许使用用户列(在命令之前),但是在运行时,crontab -e您正在编辑用户特定的crontab,该列不允许使用。IIRC Ubuntu不鼓励/etc/crontab手动退出,因为它可能会被覆盖。看到这里:stackoverflow.com/questions/8475694/…–
乔丹(Jordan Running)

@Jordan因此,crontab的根目录答案是sudo crotab -u root -e
破事

40

从手册页

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>
      • 或为整个Shell会话设置EDITOR的值
        1. export EDITOR=vim
        2. crontab -e
    • 使脚本可执行 chmod a+x <file>


  1. 创建脚本/程序作为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,并在中定义cron.hourly/etc/cron.d/0hourly


  1. 或者,可以在中创建系统crontable /etc/cron.d

    • 将先前描述的crontab语法(另外为用户提供了执行每个作业的方式)放入文件中,然后将该文件放入/etc/cron.d目录。
    • 这些在系统包装(例如RPM包装)中易于管理,因此通常可能是特定于应用程序的。
    • 语法差异在于,必须在时间/日期字段之后和要执行的命令之前为cron作业指定用户。
    • 添加到的文件/etc/cron.d不需要是可执行的。
    • 这是一个以user身份执行的示例作业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

5

有时,您需要使用带有rvm的crontab来指定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

4

设置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

您的crontab语法对于03:45不正确。crontab字段是分钟,然后是小时,即“ 45 03”-您在帖子中向后。
罗素E Glaue 2014年

1

您可以通过两种方式执行Shell脚本,即使用cron作业或编写Shell脚本

假设您的脚本名称是“ yourscript.sh”

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

ll script.sh

如果脚本在根目录下,则使用以下命令

须藤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天-表示它等待一天,然后再次运行。

现在将权限授予您的脚本。使用以下命令:-

chmod + x every-day.sh

现在,使用“ nohup”在后台执行此shell脚本。即使您从会话中注销,这也将继续执行脚本。

使用以下命令执行脚本。

nohup ./every-day.sh&

注意:-要每天在23:55 pm运行“ yourscript.sh”,您必须在23:55 pm恰好执行“ every-day.sh”脚本。


0

将此句子放在crontab文件中:0 0 * * * / usr / local / bin / python /opt/ByAccount.py> /var/log/cron.log 2>&1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.