J'ai mis un script exécutable /etc/cron.hourly
, mais ce script ne s'exécutait pas toutes les heures, en fait il ne s'exécute jamais du tout.
Voici le script (Hour-sound) que j'ai réalisé:
#! / bin / bash mplayer ~ / Musique / sfx_msg-highlight.wv &> / dev / null & spd-say -r -50 -p 50 -t male3 "Le temps est maintenant $ (date +"% l% p ")" notify-send "C'est:" "$ (date +"% l% p ") maintenant." -i ~ / Images / "premier tee.png" -t 5000
Mon crontab est:
DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
0 * * * * /home/naruto/Hour-sound.sh
Bien que les commandes mplayer
et spd-say
soient exécutées correctement, ce notify-send
n'est pas le cas. J'ai également essayé de rediriger l'erreur vers un fichier:
0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error
Mais cela n'a montré aucune sortie. Qu'est-ce que je fais mal?
/etc/crontab
a larun-parts
ligne pour exécuter toutes les heurescron
emplois dans le répertoire?/etc/crontab
fichier a- t- il la ligne17 * * * * root cd / && run-parts --report /etc/cron.hourly
?Réponses:
Comme vous l'avez probablement vu dans les commentaires de votre question, les cronjobs dans
/etc/cron.hourly
(et les autres répertoires similaires) sont exécutés parrun-parts
.run-parts
est un peu pointilleux sur les noms de fichiers. Par défaut, il n'exécute pas les fichiers dont les noms de fichiers contiennent autre chose que (tous ceux de ASCII)Donc, si votre script a un nom de fichier par exemple "myscript.sh", il est simplement ignoré, car il
run-parts
n'aime pas le point.la source
/etc/cron.hourly
ne sont pas nécessairement exécutés "à l'heure"? Si votre cronjob en/etc/crontab
a 17 à la position des minutes, les scripts sont exécutés à 00:17, 01:17 et ainsi de suite. Et encore une fois au cas où, les autorisations du script permettent à l'utilisateur root de les exécuter?/etc/cron.d/
ne doivent pas avoir d'autorisations d'écriture ou d'exécution pour "groupe" ou "autres". "propriétaire" a besoin d'une autorisation d'exécution, "groupe" et "autres" ne doivent avoir qu'une autorisation de lecture. Peut-être que cela s'applique/etc/cron.hourly
également, même si je n'ai pas testé cela.Un problème est que vous essayez d'exécuter une application graphique (
notify-send
) à partir de cron. Cela prend un peu de peaufinage. Vous devez définirXAUTHORITY
etDISPLAY
variables dans le crontab afin qu'il puisse se connecter à votre session X en cours d'exécution et vous devez définirXDG_RUNTIME_DIR
pour qu'il puisse se connecter à votre session pulseaudio. Malheureusement, ceux-ci doivent être définis dans la crontab elle-même, vous ne pouvez donc pas les utiliser/etc/cron.hourly
. Au lieu de cela, exécutezcrontab -e
et ajoutez ces lignes:Modifiez la valeur de
XDG_RUNTIME_DIR
ce qui est retourné lorsque vousecho
les avez depuis un terminal. Sur mon système, c'est:Ce sera probablement le même sur le vôtre, mais vérifiez d'abord. Maintenant, votre script s'exécutera toutes les heures et devrait fonctionner comme prévu.
la source
notify-send
nécessite que les variablesXAUTHORITY
etDISPLAY
soient définies et ii)mplayer
nécessite que les variablesXDG_RUNTIME_DIR
soient définies. Avez-vous essayé ma suggestion? Cela devrait résoudre les deux problèmes. Vous avez probablement également eu des problèmes de dénomination en raison de cerun-parts
qui est expliqué dans l'autre réponse./etc/crontab
, ne faites pas ça. Vous voulez que cela soit exécuté en tant qu'utilisateur, pas en tant que root et ce fichier a un format différent de toute façon. Faites ce que j'ai dit dans ma réponse, courezcrontab -e
et ajoutez les lignes là-bas.Un script se terminant par
.sh
n'est pas exécuté dans le/etc/cron.hourly
dossier:renommer le script
ou mettez l'appel de script dans
ce qui permet la
.sh
finla source
N'utilisez pas de script avec extension (abc.sh) et ajoutez votre place de besoin. (heures cron).
ajoutez votre code au fichier abc et enregistrez-le (pour votre besoin) (ce devrait être la commande bash)
utilisation
pour créer un fichier exécutable.
il y a quelques lignes prédéfinies. modifiez votre ligne de minutes en heures et enregistrez-la.
alors il fonctionnera correctement.
la source