Pourquoi une seule commande wget fonctionne-t-elle dans ma crontab?

15

Je souhaite récupérer le contenu d'un script PHP sur mon serveur deux fois par jour, en modifiant une variable de requête langpour définir la langue que nous voulons et enregistrer ce contenu dans des fichiers spécifiques à deux langues. Voici ma crontab:

*/15 * * * * ~root/apache.sh > /var/log/checkapache.log
10 0 * * * wget -O /path/to/file-sv.sql "http://mydomain.com/path/?lang=sv"
11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en"

Le problème est que seule la première ligne de commande wget est en cours d'exécution (ou pour être précis: le seul fichier en cours d'écriture l'est /path/to/file-sv.sql). Si je change la deuxième et la troisième ligne, /path/to/file-en.sqlest écrit à la place. La première ligne fonctionne toujours comme prévu, peu importe où elle se trouve.

J'ai ensuite essayé de l'utiliser lynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlen vain; seule la première ligne lynx a été exécutée avec succès. Même mélanger wget et lynx n'a pas changé cela!

Devenir un peu désespéré! Suis-je en train de manquer quelque chose? Il existe des milliers d'articles sur crontab (combiné avec) wget ou lynx, mais tous semblent couvrir les configurations et la syntaxe de base. Quelqu'un at-il une idée de ce que je fais mal?

Merci,
Alexander

Alexander Wallin
la source
Êtes-vous sûr qu'à chaque fois que vous accédez à mydomain.com/path/?lang=en quelque chose est retourné? avez-vous essayé cela à partir d'une ligne de commande pour voir ce qui se passe (wget -O - mydomain.com/path/?lang=en )?
Torian
1
J'essaierais d'effacer et de recréer le retour chariot entre 2 et 3.
Antonius Bloch
La meilleure pratique consiste à spécifier le chemin d'accès complet aux exécutables dans crontab. Comme: "/ usr / bin / wget". Je ne pense pas que cela aiderait dans votre cas, car l'un des crons fonctionne.
Antonius Bloch
Qu'est-ce qui s'affiche dans le journal de cron lorsque cela se produit?
haricots
@Torian: Fonctionne comme un charme.
Alexander Wallin

Réponses:

42

Essayez d'ajouter une nouvelle ligne à la fin de votre crontab.

gelraen
la source
1
Tu es une aubaine! Ça y est! Je vous voterais si j'avais la réputation. :)
Alexander Wallin
1
@gelraen Mais ... pourquoi?
Samuel
2

Il y a quelque chose dans le texte qui ne va pas. Modifiez votre crontab dans vim puis affichez les caractères invisibles.

:set invlist

Vous devriez pouvoir le voir puis le corriger.

bahamat
la source
Comment ça? Comment puis-je le modifier dans Vim? J'ai essayé de réécrire tout le fichier au cas où le copier-coller causerait des problèmes.
Alexander Wallin
@afEkenholm: comment l'éditez-vous maintenant?
bahamat
1
@bahamat:# crontab -e
Alexander Wallin
@afEkenholm: faites ceci:EDITOR=vim crontab -e
bahamat
@bahamat: Tout semble très bien. Vous avez un violet $à la fin de chaque ligne?
Alexander Wallin
1

Essayez d'ajouter une redirection, pour déboguer crontab (ou lire le courrier racine):

11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en" > /tmp/crontab_ouptput 2> /tmp/crontab_error

Exécutez également 'wget -O /path/to/file-en.sql " http://mydomain.com/path/?lang=en "' à partir de la console.

Utilisez également 'crontab -e' pour valider le nouveau crontab.

Essayez également de supprimer la ligne qui ne fonctionne pas et de la retaper à partir du clavier.

Corntab de sauvegarde et commande d'exécution:

crontab -l | crontab -
alvosu
la source
L'ajout /tmp/crontab_ouptput 2> /tmp/crontab_errorne fonctionne que pour la première ligne. L'exécution de la commande à partir de la console fonctionne très bien. J'ai réécrit tout le dossier à mains nues, mais rien n'a changé.
Alexander Wallin
Sauvegardez crontab et essayez: crontab -l | crontab -
alvosu
Merci pour les efforts, @alvosu, mais une simple nouvelle ligne a fait l'affaire!
Alexander Wallin
1

Je viens de passer du temps à essayer les réponses ci-dessus (ajout de nouvelles lignes, suppression de nouvelles lignes, etc.) sur un système exécutant cronie . Enfin, il existe un bogue dans cronie 1.5.3 qui exécute uniquement le premier travail cron pour chaque utilisateur . Il est corrigé dans 1.5.4

https://github.com/cronie-crond/cronie/issues/30

J'espère que cela fait gagner du temps à quelqu'un ...

Jeroen
la source