Ich habe ein Skript, das mich daran erinnert, meinen Computer nach uptime
mehr als 3 Tagen neu zu starten (obwohl es jetzt auf 0 Tage gesetzt ist, um zu überprüfen, ob das Skript ausgeführt wird, da mein Computer nur über einen Tag aktiv war.).
Mir ist klar, dass es nicht das eleganteste Drehbuch ist, aber ich versuche es! :)
#!/bin/bash
up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')
[[ $up -gt 0 ]] && xmessage -center "Restart!"
Ich habe es ausführbar gemacht chmod + x checkup.sh
und es funktioniert einwandfrei, wenn ich es über das Terminal starte./checkup.sh
Mein Crontab-Eintrag für dieses Skript lautet:
46 14 * * * /home/username/Desktop/./checkup.sh
So läuft es täglich um 14: 46h ...
Also ... ich denke, es sollte laufen, es sei denn, ich habe etwas wirklich Dummes getan. Denken Sie auch, dass es in Ordnung ist, dieses Bash-Skript zu verschieben /bin
?
/home/dnaneet/Desktop/./checkup.sh
funktioniert einwandfrei . Aber/home/dnaneet/Desktop/checkup.sh
kann nicht richtig funktionieren? Weil es einen braucht./
?Antworten:
Eins nach dem Anderen:
Zuerst geben wir Ihnen einen benutzerbasierten bin-Ordner:
Sie möchten Crontab verwenden. Beginnen wir mit etwas ganz Einfachem:
Okay, das funktioniert also
Lassen Sie uns nun versuchen, ein Skript auszuführen, das dasselbe tut
Einmal in der Minute rennen, bis es funktioniert
Nein, Sie brauchen kein ./ in der Mitte der Linie. ./ ist für den Fall, dass Sie relative URLs angeben.
Okay, das funktioniert also
Versuchen wir nun, ein Skript auszuführen, das xmessage aufruft
funktioniert nicht
Zunächst müssen wir uns nicht auf Umgebungsvariablen verlassen. Dies schließt Pfadeinstellungen, x11-Einstellungen oder alles andere ein (Python- und Ruby-Umgebungsvariablen fallen mir ein ...)
Lassen Sie uns unsere ein bisschen wie Anacrons richtige Cron-Datei aussehen. Ich habe dies als Test gespeichert
Stellen Sie ein, um einmal pro Minute zu laufen
crontab test
um es zu importierenWeiter zum Skript
Okay, das funktioniert also ... was haben wir getan?
Wir haben alle Befehle geändert, damit sie nicht von Pfaden abhängen, die wir nicht explizit festgelegt haben.
Wir haben unser Skript explizit mit bash ausgeführt.
Wir haben dem Skript mitgeteilt, dass wir erwarten, dass es auf DISPLAY: 0.0 ist
quelle
:-/
=
für die spezifizierende Linie loswerdenDISPLAY
. Zweitens wurdePATH
das Popup-Fenster nicht angezeigt, als ich meine crontab-Datei bearbeitete und wie vorgeschlagen hinzufügte und die Ausführungszeit auf einen späteren Zeitpunkt einstellte. Das Popup-Fenster zeigte sich jedoch gut, wenn das Skript mit/bin/bash
... was gibt?export DISPLAY=:0.0
hat es gut funktioniert. Obwohl es eine signifikante Zeitspanne von ungefähr 5 Sekunden gab, nachdem die Uhr die Stunde schlug, zu der mein Popup-Fenster hätte angezeigt werden sollen ... Irgendwelche Vorschläge? Aber ja, Sie korrigieren das Drehbuch!Das Problem wurde gelöst, lesen Sie das Handbuch in Google:
Beschreibung:
#!/bin/bash
als Header/home/wc3/palert/
Analyse:
Antworten:
Platzieren Sie Ihre Umgebung in der folgenden Zeile in Ihrem Skript mit:
Ändern Sie dies:
/home/wc3/palert
mit: dem Ort, an dem Sie Ihr Skript platzieren, z
/home/budi/script.sh
Stichprobe:
Versuchen Sie, Ihr Skript auf crontab zu setzen.
quelle