cron命令每12小时运行一次

问题描述:

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

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

这是我要运行,每12小时

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

其中*是我的我的博客子域的文件。

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

+0

你不明白什么:'crontab'的格式或如何访问/运行PHP脚本? – 2012-02-22 10:59:25

+0

你有没有网站列表? ('*'应该扩展到什么程度?) – wildplasser 2012-02-22 11:00:16

+0

你想在本地运行脚本还是从不同的机器调用脚本?如果你在本地拥有它,你可以轻松创建一个命令。在每个页面上逐个调用curl或wget将证明有点困难。 – 2012-02-22 11:01:08

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) 

在值字段*系指括号该列中的所有合法值。

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

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

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

+0

这是最好的答案,因为它告诉你如何在任意小时内完成这项工作,而不仅仅是12PM/12AM – corvuszero 2016-07-26 19:35:01

+2

这是一些出色的ASCII图表,@NEW! – Beejamin 2016-10-31 13:18:15

假设你的网站活在/ var /网络/网站名称,你已经安装了PHP的外壳在/ usr/bin中/ PHP的,你可以很容易地创建一个运行所有这些文件cron作业。

运行

crontab -e命令

,并添加此行

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

的*这里在/ var/WWW/*/somedir只是一个wildcart。这意味着它会捕获/ var/ww文件夹中的每个目录。

f.ex:

[[email protected] ~]$ 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 

[[email protected] ~]$ ls temp/*/testfile.php 
temp/test2/testfile.php temp/test3/testfile.php temp/test/testfile.php 

正如你所看到的,这个返回testfile.php的温度,即文件夹测试,TEST2和TEST3的每个子文件夹。 012ptEmptydir也是一个文件夹,但由于它没有testfile.php文件,所以没有什么会发生。

+0

嗨,我不确定什么'*'是什么意思在这行'/ var/www/*/somedir/index.php'你想让我按照原样使用这个命令,或者我必须用我的子域来替换它吗? – user1091558 2012-02-22 11:11:27

+0

@ user1091558:那是我在OT下问你的。你有一个网站列表(或一个脚本列表)? – wildplasser 2012-02-22 11:17:24

+0

哦,我很抱歉。我使用的是wordpress多站点。我有一个安装下的500多个博客。所以我只有网站列表 – user1091558 2012-02-22 11:40:04

您需要某种主脚本(由cron调用),它扩展了站点列表,并调用“/ usr/bin/php /var/www/*/somedir/index.php”,与'*'被列表条目取代。这可以在shell脚本,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

使用“*/12”的意思“每12小时。“

使用此每12小时后,将运行 * */12 * * *的PHP /无功/网络/” 您的域名“/cronfile.php

+1

这应该是0 */12 * * */path/to/php /path/to/somedir/index.php。如果你在第一个位置使用星号,它将每隔12小时每分钟运行一次。 – davelupt 2015-04-21 11:59:19

我认为正确的方法是 - >1 */12 * * *实际上,如果你设置任何号码分钟的位置就可以了

- >* */12 * * *将在24小时后12h每一分钟,然后再执行

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

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