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?
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
où *
peut être remplacé par différents noms de domaine.
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.
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.
Utilisez "*/12" pour signifier "toutes les 12 heures".
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
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