cron命令每12小时运行一次

Gir*_*iri 41 unix cron

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

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

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

http://*.mysite.com/somedir/index.php
Run Code Online (Sandbox Code Playgroud)

哪里*是我的博客的子域名.

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

Ani*_*nil 109

crontab文件有五个字段,用于指定日期,日期和时间,然后是以该间隔运行的命令.

*     *     *   *    *        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)
Run Code Online (Sandbox Code Playgroud)

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

您可以0 1,13 * * *在每个上午1点和下午1点使用哪种方法.

0 1,13 * * * rm /var/www/*/somedir/index.php > /home/someuser/cronlogs/some.log 2>&1
Run Code Online (Sandbox Code Playgroud)

哪里*可以被不同的域名取代.

  • 这是一些优秀的ASCII图表,@ NEW! (3认同)
  • 这是最好的答案,因为它向您展示了如何在任意时间执行此操作,而不仅仅是 12PM / 12AM (2认同)

Gio*_*ani 26

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

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


Jen*_*man 9

假设您的站点位于/ 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
Run Code Online (Sandbox Code Playgroud)

/ 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
Run Code Online (Sandbox Code Playgroud)

如您所见,这将返回temp的每个子文件夹中的testfile.php,即文件夹test,test2和test3.Emptydir也是一个文件夹,但由于它没有testfile.php,所以没有什么可以用它.

  • @Emirikol你是对的,*只是0-59的简写,反过来,这是0,1,2,...,59的长名单的简写.这仍然意味着celwell是对的. (2认同)

wil*_*ser 6

你需要某种主脚本(由cron调用),它扩展了站点列表,并调用"/ usr/bin/php /var/www/*/somedir/index.php",其中'*'被替换通过列表条目.这可以在shellcript,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
Run Code Online (Sandbox Code Playgroud)

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


Ger*_*mia 6

使用"*/12"表示"每12小时一次".