J'ai un script qui me rappelle de redémarrer mon ordinateur si uptime
c'est plus de, disons 3 jours (bien qu'il soit réglé sur 0 jours maintenant pour vérifier si le script est en cours d'exécution car mon ordinateur est allumé depuis seulement un jour ..).
Je réalise que ce n’est pas le scénario le plus élégant, mais j’essaie! :)
#!/bin/bash
up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')
[[ $up -gt 0 ]] && xmessage -center "Restart!"
Je l'ai rendu exécutable par chmod + x checkup.sh
et cela fonctionne bien quand je l'exécute depuis le terminal via./checkup.sh
Mon entrée de crontab pour ce script est:
46 14 * * * /home/username/Desktop/./checkup.sh
Donc, il fonctionne à 14h46 tous les jours ...
Alors ... je pense que ça devrait marcher, à moins que je ne fasse quelque chose de vraiment stupide. Aussi, pensez-vous que vous pouvez déplacer ce script bash vers /bin
?
/home/dnaneet/Desktop/./checkup.sh
fonctionne bien. Mais/home/dnaneet/Desktop/checkup.sh
peut ne pas fonctionner correctement? Parce qu'il faut un./
?Réponses:
Une chose à la fois:
Commençons par vous donner un dossier bin basé utilisateur:
Vous voulez utiliser crontab. Commençons par quelque chose de très simple:
Ok, ça marche
Maintenant, essayons de lancer un script qui fait la même chose
exécuter une fois par minute jusqu'à ce que vous obteniez le travail
Non, vous n'avez pas besoin d'un ./ au milieu de la ligne. ./ est pour quand vous donnez des URLs relatifs.
Bon, ça marche
Essayons maintenant de lancer un script qui appelle xmessage
ne fonctionne pas
Nous devons d’abord ne pas dépendre de variables d’environnement. Cela inclut la configuration du chemin, les paramètres x11, ou autre chose (les variables d'environnement python et ruby me viennent à l'esprit ...)
Faisons en sorte que les nôtres ressemblent un peu au fichier cron approprié d’Anacron.
Prêt à fonctionner une fois par minute
crontab test
l'importerSur le script
Ok, alors ça marche ... qu'avons-nous fait?
Nous avons modifié toutes les commandes pour ne plus dépendre de chemins que nous n'avions pas explicitement définis.
Nous avons exécuté notre script explicitement avec bash.
Nous avons dit au script que nous nous attendions à être sur DISPLAY: 0.0
la source
:-/
=
pour la ligne spécifiantDISPLAY
. Deuxièmement, lorsque j'ai édité mon fichier crontab, ajouté les modificationsPATH
suggérées et défini l'heure de l'exécution ultérieure, la fenêtre contextuelle ne s'affichait pas. Cependant, la fenêtre contextuelle a bien fonctionné lors de l'exécution du script avec/bin/bash
... que donne-t-il?export DISPLAY=:0.0
, cela a bien fonctionné. Bien qu'il y ait eu un temps significatif d’environ 5 secondes après le réveil, l'heure à laquelle ma fenêtre contextuelle aurait dû apparaître ... Des suggestions? Mais oui, votre amende pour le travail de script!Le problème a été résolu, lisez le manuel sur Google:
la description:
#!/bin/bash
comme en-tête/home/wc3/palert/
une analyse:
répondre:
Mettez votre environnement en utilisant cette ligne ci-dessous sur votre script avec:
changez ceci:
/home/wc3/palert
avec: l'endroit où vous mettez votre script par exemple
/home/budi/script.sh
échantillon:
Essayez de mettre votre script sur crontab.
la source