2010-06-09 6 views
3

J'ai une entrée dans mon crontab qui ressemble à ceci:Comment tester l'entrée de crontab?

0 3 * * * pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz 

Ce script fonctionne parfaitement quand je l'exécute de la coquille, mais il ne semble pas être en cours d'exécution tous les soirs. Je suppose qu'il y a quelque chose qui ne va pas avec les permissions, peut-être que crontab fonctionne sous un autre utilisateur ou quelque chose comme ça. Comment puis-je déboguer cela? Je suis un environnement d'hébergement partagé (WebFaction).

+0

J'ai le même problème mais il génère un fichier vide. J'ai un fichier .pgpass, tous les chemins sont pleins et le fichier de sortie est créé mais il est vide. Je pensais que j'ajouterais à cette question plutôt que de demander à un autre – Ben

+2

@Ben: Probablement préférable de poser une autre question en fait ... Donc ça ne fonctionne pas comme un forum .. il n'est pas aussi désapprouvé de commencer un nouveau "fil" si votre problème est légèrement différent. Si votre fichier est en cours de création, vous avez probablement un problème totalement différent. – mpen

Répondre

8

Vous devez échapper à caractères "%" dans les entrées crontab avec backslashes- voir le crontab (5) manpage . J'ai eu exactement le même problème.

Par exemple:

0 7 * * * mysqldump usblog | bzip2 -c > usblog.$(date --utc +\%Y-\%m-\%dT\%H-\%M-\%SZ).sql.bz2 

Avez-vous des e-mails pas d'erreurs Cron? Pas même si vous mettez "[email protected]" dans le crontab? Vous pouvez également avoir besoin de définir PATH dans votre crontab si pg_dump ou gzip n'est pas sur le chemin par défaut du système (utilisez donc "type pg_dump" pour vérifier où ils se trouvent, crontab ne lance généralement que les commandes dans/bin ou/usr/bin par défaut)

+0

Apparaît au travail. Merci !! – mpen

2

Toujours utiliser les chemins complets dans les entrées crontab. Par exemple, /usr/bin/gzip. Vous devrez également faire cela pour pg_dump et date.

+1

Remplacez aussi '~' par le chemin d'accès réel à votre répertoire personnel. – JayM

2

Lorsque vous dites que cela ne fonctionne pas, que voulez-vous dire? Ne génère-t-il pas le fichier ou est-il vide?

Si votre système est configuré correctement, crontab devrait vous envoyer un courriel si votre commande a généré une sortie. Essayez quelque chose comme ceci pour vérifier que crontab est en cours d'exécution. Il va toucher le fichier chaque minute.

* * * * * touch /tmp/foo 

Et vérifiez vos chemins comme James mentionné.

+0

Ne génère pas le fichier. Je suis sûr que crontab fonctionne. – mpen

+0

Êtes-vous sûr de pouvoir accéder à crontab? Je sais que certains fournisseurs d'hébergement partagé ne le permettent pas. Vous devriez probablement en parler à votre hébergeur. Une chose que vous pouvez vérifier est de voir si les fichiers '/ etc/cron.allow' et'/etc/cron.deny' existent. Si 'cron.allow' existe et que votre nom d'utilisateur n'y figure pas, vous ne pouvez pas utiliser crontab. Et si 'cron.deny' existe, vous ne voulez pas que votre nom d'utilisateur y figure. – JayM

+0

Mes autres crontabs fonctionnent. WebFaction est cool à ce sujet. Ils donnent beaucoup de pouvoir à leurs utilisateurs partagés. – mpen

1

Si cela est quelque chose comme/etc/crontab, assurez-vous que l'utilisateur est inclus:

0 3 * * * <user_goes_here> pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz