Cron.hourly ne court pas

55

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

Switchkick
la source
Cette réponse n'aurait pas dû recevoir autant de votes sans nom de fichier et de contenu.
utilisateur inconnu

Réponses:

13

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
oli206
la source
6
Utiliser cron.dailyand friends fonctionne un peu mieux si la machine ne fonctionne pas tout le temps, car anacron essaie de se rapprocher du bon programme alors que Plain Cron ne les exécutera tout simplement pas si la machine n’est pas allumée toute la nuit. Pour les emplois horaires, cela n'a probablement pas beaucoup d'importance.
poolie
9
J'apprécie beaucoup la réponse suivante, car elle traite le problème avec cron.hourly, plutôt que de trouver une solution de contournement.
Tishma
4
Ce n'est pas une réponse à la question
josh123a123
@poolie Comme on peut le voir sur/etc/crontab : cron.daily, cron.weeklyet cron.monthly courir avec anacron (si disponible) , mais toutes les heures run-parts --report /etc/cron.hourly.
Pablo Un
146

Les entrées cron.hourlysont exécutées par le mécanisme des pièces d’exécution ( man run-partspour plus d’informations). Et run-partsest difficile quant aux noms de fichiers considérés comme valides.

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.

Lors de l'ajout d'un travail à /etc/cron.hourly(ou .daily, .weeklyetc.), testez toujours après pour run-partsl'exécuter en exécutant 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?

DaithiF
la source
Il y en a deux: cerebro_random_response.sh et Cerebro Temperature.sh pas bon?
Switchkick
21
correct, pas bon :) [a-zA-Z0-9_-] sont les caractères valides, donc le '.' le rend invalide. C’est ce que j’ai voulu dire plus haut: "donner à votre script une extension le rendra invalide"
DaithiF,
11
OMG, cela vient de sauver un énorme mal de tête. MERCI! giving your script an extension will make it invalid and result in the job not being run
Jonathan S. Fisher
Vous pouvez également utiliser --reportpour exécuter les scripts.
Pablo Un
Merci pour cette info. Mon problème était que le script n'était pas exécutable, a chmod +x /etc/cron.hourly/myscriptfait le tour et l'a run-partsrépertorié comme prévu.
Yvan il y a
5

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

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

Cry Havok
la source
4

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

En outre, mon script n'avait pas #!/bin/bashdans la première ligne. Même si le script pouvait être exécuté avec la ligne de commande, run-partsil l'a rejeté en indiquant "Erreur de format Exec".

Changer le nom du fichier à partir scriptname.shde scriptnameet en ajoutant la #!/bin/bashen première ligne permet d'exécuter toutes les heures mon script.

Ben Lin
la source
-1

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 :)

Wolfy
la source
Tout fait et le script est bon, ça marche à merveille. C'est aussi dans la liste des crontab mais aucune tâche horaire ne s'exécute. Merci quand même :(
Switchkick