【问题标题】:cron command to run every 12 hourscron 命令每 12 小时运行一次
【发布时间】:2012-03-12 16:49:58
【问题描述】:

我需要每 12 小时运行一次 unix cron 命令。

我的服务器中有 500 多个子博客。

这是我想每 12 小时运行一次的文件

http://*.mysite.com/somedir/index.php

其中 * 是我博客的子域。

我需要所有博客的 cron 命令。 是否可以使用单个命令运行所有这些? 或者我必须为每个博客创建命令吗?

【问题讨论】:

  • 什么你不明白:crontab 的格式或者如何访问/运行 PHP 脚本?
  • 您在某处有网站列表吗? (“*”应该扩大到什么程度?)
  • 你想在本地运行脚本,还是从不同的机器调用它?如果您在本地拥有它,您可以轻松地创建一个命令。在每一页上逐页调用 curl 或 wget 会有点困难。
  • @Tichodroma 是的,我想要每 12 小时一次的 crontab 格式。我不想一次运行所有 500 多个博客脚本。例如,给我运行 1AM 和 1PM 的代码。谢谢
  • @JensTimmerman 我不确定你在本地是什么意思。我在 namecheap 有一个托管帐户。那是我的文件存储的地方

标签: unix cron


【解决方案1】:

一个 crontab 文件有五个字段用于指定 day 、 date 和 time ,然后是要在该时间间隔运行的命令。

*     *     *   *    *        command to be executed
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- day of week (0 - 6) (Sunday=0)
|     |     |   +------- month (1 - 12)
|     |     +--------- day of        month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

上面值字段中的* 表示该列的大括号中的所有合法值。

您可以使用0 1,13 * * *,这意味着每个凌晨 1 点和下午 1 点。

0 1,13 * * * rm /var/www/*/somedir/index.php > /home/someuser/cronlogs/some.log 2>&1

其中*可以换成不同的域名。

【讨论】:

  • 这是最好的答案,因为它向您展示了如何在任意时间执行此操作,而不仅仅是 12PM / 12AM
  • 解释一下这个字符串中的rm? :)
  • 请注意,您也可以定义一分钟,例如“47 1,13 * * *”表示“每天凌晨 1 点 47 分和下午 1 点 47 分”。这有助于减少服务器上的负载;而不是在每小时的第 0 分钟运行所有 crons,而是将它们分开
【解决方案2】:

我认为正确的方法是 -> 1 */12 * * *实际上,分钟位置的任何数字都可以解决问题。

如果你设置 -> * */12 * * * 它将在每分钟 12 点执行一次,并在 24 点再次执行。

【讨论】:

    【解决方案3】:

    假设您的站点位于 /var/www/sitename 中,并且您在 /usr/bin/php 中安装了 php shell,您可以轻松创建一个运行所有这些文件的 cron 作业。

    运行

    crontab -e

    并添加这一行

    42 */12 * * * /usr/bin/php /var/www/*/somedir/index.php  >> ~/cronjob.log 2>&1
    

    /var/www/*/somedir 中的 * 只是一个通配符。这意味着它将捕获 /var/ww 文件夹中的每个目录。

    f.ex:

    [jens@localhost ~]$ ls -l temp
    total 28
    -rw-rw-r--. 1 jens jens 1641 Feb 21 16:12 somefile.py
    drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test
    drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test2
    drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test3
    drwxr-xr-x. 8 jens jens 4096 Jan 27 10:21 emptydir
    -rw-rw-r--. 1 jens jens  548 Jan 27 16:15 Unsaved Document 1
    
    [jens@localhost ~]$ ls temp/*/testfile.php 
    temp/test2/testfile.php  temp/test3/testfile.php  temp/test/testfile.php
    

    如您所见,这将返回 temp 的每个子文件夹中的 testfile.php,即文件夹 test、test2 和 test3。 Emptydir 也是一个文件夹,但是因为里面没有 testfile.php,所以什么也不会发生。

    如果你的目录结构任意深,你可以使用**

    例如 42 */12 * * * /usr/bin/php /var/www/**/index.php >> ~/cronjob.log 2>&1

    【讨论】:

    • 您好,我不确定* 在这一行中的含义是什么/var/www/*/somedir/index.php 您希望我按原样使用命令还是我必须用我的子域替换它?
    • @user1091558:这是我在旧约下问你的。你有网站列表(或脚本列表)吗?
    • 关于您的示例的快速问题 */12。小时字段中的4/12 会匹配凌晨 4 点和下午 4 点吗?
    • 您不需要将第一个 * 更改为数字(例如 0)。我认为这在允许运行的每个小时内每分钟运行一次(当然是每天两个小时)。所以每天跑 120 次?
    • @Emirikol 你说得对,* 只是 0-59 的简写,而这又是一长串 0,1,2,...,59 的简写。这仍然意味着 celwell 是对的。
    【解决方案4】:

    使用“*/12”表示“每 12 小时”。

    【讨论】:

      【解决方案5】:

      您需要某种主脚本(由 cron 调用),它扩展了站点列表,并调用“/usr/bin/php /var/www/*/somedir/index.php”,带有 ' *' 替换为列表条目。这可以在 shellscript、perl 或 python 脚本,甚至是 php 脚本中完成。对于 sh 这可能是:(未经测试)

      #!/bin/sh
      cd /home/subdir/for/cron
      
      LIST="a b c d e f g h i j k l m o p q r s t u v w x y z"
      
      for x in $LIST; do
         /usr/bin/php /var/www/${x}/somedir/index.php 2>$1 > /tmp/${x}.log
      done
      

      如果像这样硬编码列表不方便,还有其他方法: backticks,或read < file_with_all_the_names_in_it

      【讨论】:

        【解决方案6】:

        0 */12 * * * 表示“每 12 小时的第 0 分钟。”

        查看https://crontab.guru 以获得一个不错的计算器。

        【讨论】:

          【解决方案7】:

          在控制台中写命令

          crontab -e
          

          用编辑器编辑(我喜欢 nano)

          添加行

          0 1,13 * * * php /home/catalog/public_html/crons/index.php

          关闭

          按 ctrl + x

          按 y 然后按 enter 完成:)

          检查是否用

          保存

          crontab -l

          命令

          如果你想测试它是否可以工作,只需手动运行它

          php /home/catalog/public_html/crons/index.php

          命令

          【讨论】:

            【解决方案8】:

            使用它,它将在每 12 小时后运行一次 * */12 * * * php /var/www/"你的域"/cronfile.php

            【讨论】:

            • 这应该是 0 */12 * * * /path/to/php /path/to/somedir/index.php。如果您在第一个位置使用星号,它将每 12 小时的每一分钟运行一次。
            【解决方案9】:

            ->cron('0 */12 * * *');

            此 cron 将每 12 小时运行一次调度程序。

            【讨论】:

              猜你喜欢
              • 2017-04-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-28
              • 2018-02-18
              • 2019-07-31
              相关资源
              最近更新 更多