如何编写一个每天午夜运行脚本的cron?

时间:2010-10-21 03:42:34

标签: ubuntu cron

我听说过crontab是一个不错的选择,但是如何编写该行以及将它放在服务器上的哪个位置?

6 个答案:

答案 0 :(得分:245)

Here's a good tutorial关于crontab是什么以及如何在Ubuntu上使用它。你的crontab行看起来像这样:

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

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

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 :(得分:39)

来自手册页

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节,手册页)。

    • 使用crontab -e -u <username>
    • 以root身份编辑用户的crontab
    • 或仅使用crontab -e
    • 编辑当前用户的crontab
    • 您可以使用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中定义,并在/etc/cron.d/0hourly中定义cron.hourly

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

        • 先前描述的crontab语法(另外提供用户执行每个作业)被放入文件中,文件被放入/etc/cron.d目录。
        • 这些在系统打包(例如RPM包)中易于管理,因此通常可能是特定于应用程序的。
        • 语法区别在于必须在时间/日期字段之后和执行命令之前为cron作业指定用户。
        • 添加到/etc/cron.d的文件不需要是可执行的。
        • 以下是以用户someuser执行的示例作业,并强制使用/bin/bash作为shell。

      2.    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
        

答案 2 :(得分:5)

有时您需要使用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

答案 3 :(得分: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

答案 4 :(得分:1)

您可以通过两种方式执行shell脚本:使用cron job或编写shell脚本

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

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

ll script.sh

如果脚本是root用户,请使用以下命令

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

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

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

chmod + x every-day.sh

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

使用以下命令执行脚本。

nohup ./every-day.sh&amp;

注意: - 每天下午23:55运行“yourscript.sh”,你必须在23:55 pm执行“every-day.sh”脚本。

答案 5 :(得分:0)

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