【问题标题】:How to write a cron that will run a script every day at midnight?如何编写一个每天午夜运行脚本的 cron?
【发布时间】:2011-04-28 09:38:11
【问题描述】:

听说 crontab 是个不错的选择,但是该行怎么写,放在服务器的什么位置呢?

【问题讨论】:

    标签: ubuntu cron


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以通过两种方式执行 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 while true do /home/modassir/yourscript.sh sleep 1d done

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

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

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

      chmod +x every-day.sh

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

      使用下面的命令来执行脚本。

      nohup ./every-day.sh &

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

      【讨论】:

        【解决方案3】:

        Here's a good tutorial 了解 crontab 是什么以及如何在 Ubuntu 上使用它。您的 crontab 行将如下所示:

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

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

        句法: mm hh dd mt wd 命令 mm 分钟 0-59 hh 小时 0-23 dd 月 1-31 日 mt 月 1-12 wd 第 0-7 周中的第几天(星期日 = 0 或 7) 命令:您要运行的内容 所有数值都可以用 * 代替,这意味着所有

        【讨论】:

        • 您不会错过“以用户身份运行”列吗?
        • @LucasCimon /etc/crontab(在 Ubuntu 上)中允许使用用户列(在命令之前),但是当您运行 crontab -e 时,您正在编辑一个特定于用户的 crontab,它不允许此列。 IIRC Ubuntu 不鼓励手动退出 /etc/crontab,因为它可能会被覆盖。见这里:stackoverflow.com/questions/8475694/…
        • @Jordan 所以对于 root 的 crontab 的答案是 sudo crotab -u root -e
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          来自手册页

          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 中创建系统 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
          

          【讨论】:

            【解决方案6】:

            设置 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 字段是 Minute then Hour,即“45 03” - 您在帖子中将其倒退。
            猜你喜欢
            • 2015-09-17
            • 2012-08-09
            • 2016-01-02
            • 2014-12-06
            • 1970-01-01
            • 2023-04-09
            • 2016-01-13
            • 2016-04-02
            • 1970-01-01
            相关资源
            最近更新 更多