当前位置: 首页>>技术教程>>正文


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

,

问题描述

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

最佳思路

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

次佳思路

从手册页

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

最好注意可以使用的特殊”nicknames”(在手册页中记录),尤其是没有时间和日期替代的”@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中创建系统crontable。

    • 将先前描述的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

第三种思路

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

第四种思路

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9896.html,未经允许,请勿转载。