web-dev-qa-db-fra.com

commande cron à exécuter toutes les 12 heures

J'ai besoin de la commande unix cron pour s'exécuter toutes les 12 heures.

J'ai plus de 500 sous-blogs sur mon serveur. 

Ceci est le fichier que je veux exécuter toutes les 12 heures

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

Où * est mon sous-domaine de mes blogs.

J'ai besoin de la commande cron pour tous les blogs. Est-il possible de les exécuter avec une seule commande? OU dois-je créer une commande pour chaque blog?

39
user1091558

Un fichier crontab contient cinq champs pour spécifier le jour, la date et l'heure, suivis de la commande à exécuter à cet intervalle.

*     *     *   *    *        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)

* dans le champ de valeur ci-dessus signifie toutes les valeurs légales comme entre accolades pour cette colonne.

Vous pouvez utiliser 0 1,13 * * *, ce qui signifie pour chaque heure du matin et de 13h.

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

* peut être remplacé par différents noms de domaine.

104
Anil

Je pense que la bonne façon est -> 1 */12 * * * ( en fait, tout nombre dans la position minute fera l'affaire. )

Si vous définissez -> * */12 * * *, il sera exécuté toutes les minutes à 12h et de nouveau à 24h.

22
Giovani Dardani

En supposant que vos sites résident dans/var/www/sitename et que le shell php soit installé dans/usr/bin/php, vous pouvez facilement créer un travail cron qui exécute tous ces fichiers.

courir 

crontab -e

et ajouter cette ligne

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

Le * ici dans/var/www/*/somedir est juste un wildcart. Cela signifie que tous les répertoires de votre dossier/var/ww seront capturés.

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

Comme vous pouvez le constater, ceci renvoie le fichier testfile.php dans chaque sous-dossier de temp, à savoir dossier test, test2 et test3. Emptydir est aussi un dossier, mais comme il ne contient pas testfile.php, rien n’arrivera.

8
Jens Timmerman

Utilisez "*/12" pour signifier "toutes les 12 heures".

6
Geremia

Vous avez besoin d'une sorte de maître-script (appelé par cron), qui développe la liste des sites et appelle "/ usr/bin/php /var/www/*/somedir/index.php", avec le '*' remplacé par une entrée de liste. Cela peut être fait dans un script, un script Perl ou python, ou même un script php. Pour sh cela pourrait être: (non testé)

#!/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

S'il est gênant de coder ainsi la liste en dur, il existe d'autres méthodes: backticks ou read < file_with_all_the_names_in_it

6
wildplasser

Commande d'écriture dans la console

crontab -e

éditer avec l'éditeur (j'aime nano)

ajouter une ligne

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

fermer avec

appuyez sur ctrl + x

appuyez sur y puis appuyez sur entrée fait :)

Vérifier si enregistré avec 

crontab -l

commander

si vous voulez tester si cela fonctionnera, testez simplement le lancer manuellement avec

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

commander

1
Matas Lesinskas