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

Ubuntu 如何编写每天午夜运行脚本的cron?,ubuntu,cron,Ubuntu,Cron,我听说crontab是一个不错的选择,但是我该如何写这行代码,以及把它放在服务器上的什么地方呢?关于什么是crontab以及如何在Ubuntu上使用它。您的crontab行将如下所示: 00 00 * * * ruby path/to/your/script.rb (00表示午夜--0分钟零小时--*s表示每月的每一天。) 语法: mm hh dd mt wd命令 毫米分钟0-59 小时0-23 第1-31月的dd日 mt第1-12个月 第0-7周的wd日(星期日=0或7) 命令:您想要运行什

我听说crontab是一个不错的选择,但是我该如何写这行代码,以及把它放在服务器上的什么地方呢?

关于什么是crontab以及如何在Ubuntu上使用它。您的crontab行将如下所示:

00 00 * * * ruby path/to/your/script.rb
00
表示午夜--0分钟零小时--
*
s表示每月的每一天。)

语法: mm hh dd mt wd命令 毫米分钟0-59 小时0-23 第1-31月的dd日 mt第1-12个月 第0-7周的wd日(星期日=0或7) 命令:您想要运行什么 所有数值都可以替换为*表示所有 从手册页

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作业,可以执行以下三项操作之一:

  • 向用户的crontab添加命令,如上图所示(以及从crontab,第5节,手册页)。

    • 使用
      crontab-e-u
    • 或者使用
      crontab-e
    • 您可以使用
      编辑器
      环境变量设置编辑器
      • env EDITOR=nano-crontab-e-u
      • 或者为整个shell会话设置编辑器的值
      • export EDITOR=vim
      • crontab-e
    • 使用
      chmod a+x使脚本可执行

  • 创建脚本/程序作为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\u runs\u daily.sh
      • chmoda+x/etc/cron.daily/script\u runs\u daily.sh
        ——使其可执行
    • 另请参见anacron手册页:
      man-anacron
    • 使用
      chmod a+x使脚本可执行
    • 这些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

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

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


  • 设置cron作业的快速指南

    创建一个新的文本文件,例如:mycronjobs.txt

    对于每个日常作业(00:00、03:45),将计划行保存在mycronjobs.txt中

    将作业发送给cron(每次运行此操作时,cron都会删除已存储的内容,并使用mycronjobs.txt中的新信息进行更新)

    额外有用信息

    请参阅当前的cron作业

    crontab -l
    
    crontab -r
    
    删除所有cron作业

    crontab -l
    
    crontab -r
    

    有时,您需要使用带有rvm的crontab指定路径和GEM_路径

    像这样:

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

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

    ll script.sh

    如果脚本位于根目录中,则使用以下命令

    sudo crontab-e

    第二,如果脚本包含用户“ubuntu”,则使用下面的命令

    crontab-e

    在crontab中添加以下行:-

    55 23***/path/to/yourscript.sh

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

    下面是脚本,您必须在其中输入脚本名(例如:-youscript.sh),该脚本将在每天晚上23:55运行

    
    #!/bin/bash
    虽然是真的
    做
    /home/modassir/yourscript.sh
    睡眠1d
    完成
    

    将其保存在文件中(将其命名为“everyday.sh”)

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

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

    chmod+x每天。sh

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

    使用下面的命令执行脚本

    nohup./every-day.sh&


    注意:-要在每天晚上23:55运行“yourscript.sh”,您必须在晚上23:55执行“everyday.sh”脚本。

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

    您的crontab语法对于03:45不正确。crontab字段是分钟,然后是小时,即“45 03”-您的帖子中有它。您是否错过了“以用户身份运行”列?@lucasimon用户列(位于命令之前)在
    /etc/crontab
    (在Ubuntu上)中是允许的,但是当您运行
    crontab-e
    时,您正在编辑一个特定于用户的crontab,这不允许使用此列。IIRC U
    crontab -r
    
    # 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