2012-02-22 3266 views
33

我需要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

回答

94

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

8

假設你的網站活在/ 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

6

您需要某種主腳本(由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

5

使用「*/12」的意思「每12小時。「

-1

使用此每12小時後,將運行 * */12 * * *的PHP /無功/網絡/」 您的域名「/cronfile.php

+1

這應該是0 */12 * * */path/to/php /path/to/somedir/index.php。如果你在第一個位置使用星號,它將每隔12小時每分鐘運行一次。 – davelupt 2015-04-21 11:59:19

17

我認爲正確的方法是 - >1 */12 * * *實際上,如果你設置任何號碼分鐘的位置就可以了

- >* */12 * * *將在24小時後12h每一分鐘,然後再執行

-2

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

該cron將每12小時運行一次調度程序。

相關問題