J'ai un script qui me rappelle de redémarrer mon ordinateur si uptime
est supérieur à, disons 3 jours (bien qu'il soit défini sur 0 jours maintenant pour vérifier si le script est en cours d'exécution car mon ordinateur n'a pas fonctionné depuis 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 lorsque 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 qu'il est correct de déplacer ce script bash vers /bin
?
Une chose à la fois:
Commençons par vous donner un dossier bin basé utilisateur:
cd ~/ && mkdir bin
Vous voulez utiliser crontab. Commençons par quelque chose de très simple:
* * * * * touch /tmp/testing.txt
Bon, ça marche
Maintenant, essayons de lancer un script qui fait la même chose
* * * * * /home/username/bin/touchtest.sh
courir une fois par minute jusqu'à ce que ça fonctionne
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
* * * * * /home/username/bin/rebootwarn.sh
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 toute autre chose (les variables d’environnement python et Ruby viennent à l’esprit ...)
Faisons en sorte que les nôtres ressemblent un peu au fichier cron approprié d’Anacron.
#Borrowed from anacron
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#End borrowed from anacron
* * * * * /bin/bash /home/username/bin/test.sh
Prêt à fonctionner une fois par minute
crontab test
pour l'importer
Sur le script
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
up=$(uptime | grep "day" > /home/dnaneet/uptime.foo && awk < /home/dnaneet/uptime.foo '{ print $3 }')
[[ $up -gt 0 ]] && xmessage -center "Restart!"`
Ok, alors ça marche ... qu'avons-nous fait?
Nous avons modifié toutes les commandes pour qu'elles ne dépendent pas de chemins que nous n'avons 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
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éponse:
mettez votre environnement en utilisant cette ligne ci-dessous sur votre script avec:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/wc3/palert
changez ceci: /home/wc3/palert
avec: l'endroit où vous avez mis votre script, par ex. /home/budi/script.sh
échantillon:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/budi
# Script continues...
Essayez de mettre votre script sur crontab.