如何编写一个每天午夜运行的定时任务 cron?

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

234019 次浏览

这里有一个很好的教程 关于 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
...

值得注意的是,可以使用特殊的“昵称”(在手册页中有文档说明) ,特别是“@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>编辑用户的 crontab 作为 root 用户
    • 或者只用 crontab -e编辑当前用户的 crontab
    • 你可以用环境变量设置编辑器
      • 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.hour
      • /etc/cron 月刊
      • /etc/cron.Weekly
    • 例如:
      • /etc/cron.daily/script _ running _ 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.hour


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

    • 前面描述的 crontab 语法(另外提供一个用户来执行每个作业)被放到一个文件中,然后该文件被放到/etc/cron.d 目录中。
    • 这些在系统打包(例如 RPM 包)中很容易管理,所以通常是特定于应用程序的。
    • 语法差异在于,必须在 time/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

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

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

您可以通过两种方式执行 shell 脚本,一种是使用 cron 作业,另一种是编写 shell 脚本

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

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

我的脚本

如果脚本在 root 中,则使用以下命令

Sudo crontab-e

其次,如果脚本包含用户“ ubuntu”,那么使用以下命令

Crontab-e

在 crontab 中添加以下行:-

5523 * * */path/to/yourscript.sh

另一种方法是编写一个脚本并在后台运行它

这里有一个脚本,你必须把你的脚本名称(例如:-youscript.sh) ,它将在每天下午23:55运行

# !/bin/bash 是真的 做 /home/modassir/yourscript.sh 睡眠1D 搞定

将其保存在一个文件中(将其命名为“ every-day.sh”)

Sleep 1d-表示它等待一天,然后再次运行。

现在允许 script.use 使用以下命令:-

Chmod + x every-day.sh

现在,通过使用“ nohup”在后台执行这个 shell 脚本。 这将在您从会话注销后继续执行该脚本。

使用以下命令执行脚本。

没有。/every-day. sh &

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

把这句话放在 crontab 文件中: 00 * * */usr/local/bin/python/opt/ByAccount.py >/var/log/cron.log 2 > & 1