Cron.hourly ne fonctionnera pas

46

Ok, j'ai donc fait mon script, je l'ai laissé tomber dans /etc/cron.hourly puis j'ai chmod 777 le fichier mais il ne s'exécutera pas (automatiquement). Si je l'exécute manuellement, cela fonctionne bien. Dois-je faire autre chose?

    
posée Switchkick 20.10.2010 - 09:55
la source

5 réponses

12

Pourquoi ne pas utiliser crontab (/ etc / crontab) et utiliser * / 1 dans le champ heure. Je l'ai utilisé pour exécuter un script toutes les 5 minutes et cela fonctionne bien:

# m h dom mon dow user  command
* */1  * * *   user    command
    
réponse donnée oli206 20.10.2010 - 13:44
la source
133

Les entrées de cron.hourly sont exécutées par le mécanisme des éléments d'exécution ( man run-parts pour plus d'informations). . Et run-parts est sélectif quant aux noms de fichiers qu’il considère comme valides.

Par exemple, si vous attribuez une extension à votre script, il sera invalide et le travail ne sera pas exécuté. [a-zA-Z0-9_-] sont les caractères valides, donc le '.' le rend invalide.

Lorsque vous ajoutez un travail à /etc/cron.hourly (ou .daily , .weekly , etc.), testez toujours par la suite que run-parts l'exécutera en exécutant la commande suivante:

run-parts --test /etc/cron.hourly

Si en exécutant cette commande, il affiche votre fichier, cela signifie que cela a fonctionné. Sinon, ne montre rien, votre nom de fichier n'est pas valide.

Quel était le nom de votre script?

    
réponse donnée DaithiF 03.05.2011 - 18:12
la source
4

Votre problème est probablement dû aux autorisations trop ouvertes, qui permettent à quiconque de modifier votre fichier. Essayez plutôt 755 .

La recherche dans les entrées cron de votre sortie syslog devrait confirmer cela.

    
réponse donnée Cry Havok 20.10.2010 - 10:24
la source
4

La réponse de DaithiF devrait être la bonne réponse.

De plus, mon script n'avait pas #!/bin/bash dans la première ligne. Même si le script pouvait être exécuté avec la ligne de commande, run-parts le rejetait en disant "erreur de format Exec".

Le changement du nom de fichier de scriptname.sh à scriptname et l'ajout de #!/bin/bash à la première ligne a permis à mon script de s'exécuter toutes les heures.

    
réponse donnée Ben Lin 07.08.2014 - 23:10
la source
0

Lorsque vous courez

crontab -l

cette tâche figure-t-elle dans la liste?

sinon, ajoutez-le

crontab -e

ajoutez cette ligne

0 * * * * yourScript

si c'est dans cette liste, essayez d’ajouter le chemin du langage de programmation en haut de votre script

Exemple:

bash: #!/bin/bash

Ce 2 choses ont toujours résolu mes problèmes:)

    
réponse donnée Wolfy 20.10.2010 - 10:08
la source

Lire d'autres questions sur les étiquettes