Comment puis-je configurer un crontab pour exécuter une requête mysql et connecter la sortie?
Bien, le titre, l'auto décrit..
J'ai besoin d'exécuter une fonction sql pour nettoyer certains dupliqué postes, j'ai besoin de le faire plusieurs fois par jour, donc j'ai besoin d'utiliser cron...
J'ai mis un nouveau crontab de l'emploi, comme ceci:
00 16,18,19,20,21 * * * mysql -h MY-DB-HOST.COM -u MY-DB-USERNAME -pMY-DB-PASSWORD -e "delete from hotaru_posts where post_id in ( select post_id from ( select post_id from hotaru_posts a group by post_title having count(post_title) > 1 ) b )" >> /tmp/cron_job.log
mais rien ne semble être connecté, donc je suppose que sa ne fonctionne pas.
Theres pas de problème avec la phrase sql, ce n'est pas la question ici.
Quelque chose de mal avec mon cron règle?
Est-ce que votre nom d'utilisateur/mot de passe contiennent des symboles qui pourraient confondre bash? Comme
Première pensée, consultez le fichier /var/log/cron pour s'assurer qu'il est de même de la tentative d'exécution.
La deuxième pensée, l'utilisation du chemin d'accès complet de mysql dans le cas où il n'est pas en CHEMIN.
Je veux dire utiliser /usr/local/bin/mysql au lieu de simplement mysql. (Ou quel que soit votre chemin est fait.)
Lucas, si vous rencontrez toujours ce problème, je voudrais essayer deux choses, d'abord, le changement '00' à '0'. Je doute que la corriger, mais on ne sait jamais. Deuxième, juste essayer de lancer "echo" test " >> /tmp/cron_job.journal" au lieu de votre commande mysql pour vous assurer cron fonctionne à tous.
&
?Première pensée, consultez le fichier /var/log/cron pour s'assurer qu'il est de même de la tentative d'exécution.
La deuxième pensée, l'utilisation du chemin d'accès complet de mysql dans le cas où il n'est pas en CHEMIN.
Je veux dire utiliser /usr/local/bin/mysql au lieu de simplement mysql. (Ou quel que soit votre chemin est fait.)
Lucas, si vous rencontrez toujours ce problème, je voudrais essayer deux choses, d'abord, le changement '00' à '0'. Je doute que la corriger, mais on ne sait jamais. Deuxième, juste essayer de lancer "echo" test " >> /tmp/cron_job.journal" au lieu de votre commande mysql pour vous assurer cron fonctionne à tous.
OriginalL'auteur Lucas Matos | 2012-03-30
Vous devez vous connecter pour publier un commentaire.
bien, car mysql ne fonctionnait pas directement à l'intérieur de crontab (la pensée que je pense que c'était un problème de chemin d'accès comme Alex Howansky dit), j'ai créé un fichier php traiter cette requête et a appelé le php dans crontab, beaucoup plus facile, et de me donner la possibilité à des conditions d'utilisation.
la tâche cron:
le php:
Merci pour toute l'aide.
OriginalL'auteur Lucas Matos
exécutez les opérations suivantes dans votre cron configurations
OriginalL'auteur Moutaz Salem
Je soupçonne que votre script fonctionne, mais n'est en fait pas aucun retour de sortie. Voici mon test local:
Juste pour être clair, foo est un fichier vide.
posts
n'était pas une table vide.Donc, pour être plus précis, je pense que c'est le comportement attendu de MySQL ici, bien que je ne peux pas confirmer dans leurs docs. Si vous voulez/besoin de sortie ici, vous aurez probablement besoin d'écrire un script pour vérifier votre table avant/après la suppression.
Désolé, c'est la mise en forme de mon invite de commande, j'ai juste enlevé.
Oh désolé, j'ai supprimé quelque chose d'autre. '>", écrit dans un fichier, mais remplace tout le contenu existant. ">>' ajoute un fichier, en préservant le contenu existant.
oh, ok, 10chars
eh bien, c'était suposed à exécuter à 16:00, déjà 16:15 le journal est vide et le double posts toujours là.. Donc, c'est vraiment pas de travail, ce n'est pas seulement à propos de la sortie. =(
OriginalL'auteur muffinista
Vous devez utiliser le chemin d'accès complet à des scripts exécutés par une tâche cron. Par exemple, si la base de données mysql binaire est /usr/local/mysql/bin/mysql que vous souhaitez utiliser dans votre tâche cron.
/usr/bin:/bin
). Comme:PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
OriginalL'auteur Florian