web-dev-qa-db-fra.com

Cron.hourly ne court pas

Ok, donc j’ai fait mon script, je l’ai déposé dans /etc/cron.hourly puis je chmod 777 le fichier mais il ne fonctionnera pas (automatiquement). Si je le lance manuellement, cela fonctionne bien. Dois-je faire autre chose?

54
Switchkick

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

# m h dom mon dow user  command
* */1  * * *   user    command
13
oli206

Les entrées dans cron.hourly sont exécutées par le mécanisme de run-parts ( man run-parts pour plus d'informations). Et run-parts choisit les noms de fichiers qu’il considère comme valables.

Par exemple, attribuer une extension à votre script le rendra invalide et empêchera l'exécution du travail. [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.), vérifiez toujours par la suite que run-parts l'exécutera en émettant la commande suivante:

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

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

Quel était le nom de votre script?

141
DaithiF

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

Rechercher dans les entrées cron de votre sortie syslog devrait le confirmer.

5
Cry Havok

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é à l'aide de la ligne de commande, run-parts l'a rejeté en indiquant "Erreur de format Exec".

Changer le nom du fichier de scriptname.sh en scriptname et ajouter le #!/bin/bash en première ligne ont permis à mon script de s'exécuter toutes les heures.

4
Ben Lin

Quand tu cours

crontab -l

cette tâche est-elle sur la liste?

sinon ajoutez-le

crontab -e

ajouter cette ligne

0 * * * * yourScript

s'il se trouve dans cette liste, essayez d'ajouter le chemin du langage de programmation en haut de votre script.

Exemple:

bash: #!/bin/bash

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

0
Wolfy