Was ist ein einfacher Weg, um einen Befehl auszuführen, zum Beispiel in 8 Stunden? Ich kann mir das so vorstellen:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Gibt es einen "angemesseneren" Weg?
Was ist ein einfacher Weg, um einen Befehl auszuführen, zum Beispiel in 8 Stunden? Ich kann mir das so vorstellen:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Gibt es einen "angemesseneren" Weg?
Antworten:
Sie können den at
Befehl verwenden. Die at
Ausführungsbefehle werden zu einem späteren Zeitpunkt ausgeführt. Das at
Dienstprogramm liest Befehle von der Standardeingabe und gruppiert sie als At-Job, um sie zu einem späteren Zeitpunkt auszuführen.
Wird normalerweise at
standardmäßig in Ubuntu installiert, aber wenn Ihre Version es nicht enthält, installieren Sie es über:
sudo apt-get install at
Weitere Informationen, Optionen, Beispiele und andere finden Sie im Ubuntu Manpage Repository
Beispiel:
at now +8 hours -f ~/myscript.sh
Sie können auch praktische Abkürzungen wie tomorrow
oder noon
wie in verwenden
echo "tweet fore" | at teatime
Warnung: Dadurch wird der Befehl sofort links von der Pipe ausgeführt, die Ausgabe wird jedoch erst später angezeigt. Das Beispiel zeigt auch, wie Sie Aktionen weiterleiten könnenat
. at -c
Auf diese Weise können Sie geplante Aktionen untersuchen, die Sie bequem mit ihrer Nummer auflisten können, wie mit:
at -c 3
at now +8 hours -f ~/myscript.sh
at 8:00
der Befehl zu einem absoluten Zeitpunkt ausgeführt werden, und zwar batch
"wenn der Computer im Leerlauf zu sein scheint"
teatime
ist um 16 Uhr. Aus bestimmten Gründen wird es in manpages.ubuntu.com/manpages/raring/man1/at.1posix.html nicht erwähnt, aber in man at
und hier in manpages.ubuntu.com/manpages/raring/en/man1/at.1.html .
gpio write 8 1
jedoch sofort ausgeführt wurde.
Ja, Sie können einen Cron-Job einstellen.
Wenn zum Beispiel jetzt 14:39:00 Uhr und heute Freitag, 30. August, ist, können Sie den folgenden Cron-Job (der nach 8 Stunden ausgeführt werden soll) mit dem crontab -e
Befehl in Ihre crontab-Datei einfügen :
39 22 30 8 5 /path/to/mycommand.sh
Mehr über:
crontab
bis Sie ihn entfernen. Ein Jahr später, wenn Sie vergessen haben, wer es dort abgelegt hat und warum, werden Sie sich am Kopf kratzen und sich fragen, was Sie mit dem Befehl anfangen sollen.
Verwenden Sie die Gnome-basierte GUI für cron
, at
und dergleichen:
Die Einführung des CronHowto schlägt vor, die GUI zu verwenden gnome-schedule
, die viel netter ist, als den ganzen Müll in das Terminal zu tippen (besonders für "durchschnittliche" Ubuntu-Benutzer, die keine "Power" * nix / bsd-Benutzer sind).
Führen Sie es mithilfe von Unity Dash (oder eines anderen Anwendungsmenüs) aus, um nach geplanten Aufgaben zu suchen oder auszuführen gnome-schedule
.
Auf Gnome-basierten Ubuntu-Systemen Gnome Scheduled Tasks Tool (aus dem gnome-schedule-Paket) in Applications -> System Tools bietet eine grafische Oberfläche mit Eingabeaufforderungen zur Verwendung von Cron. Die Projektwebsite befindet sich unter http://gnome-schedule.sourceforge.net/ ; Die Software kann über das Software Center oder durch Eingabe von installiert werden
sudo apt-get install gnome-schedule
in einem Terminal.
Wenn Sie gnome-schedule
für ein Skript in Ihrem Ausgangsverzeichnis einen neuen Befehl "at" verwenden, wird dieser Fenstertyp verwendet:
Ich fand einen schnellen und schmutzigen Weg, um dies zu tun, bevor ich herausfand, dass at
es eine Sache war.
Angenommen, Sie möchten, dass Ihr Skript mittags ausgeführt wird:
until [[ "$(date)" =~ "12:00:" ]]; do
sleep 10
done
./mycommand.sh
Angenommen, Sie möchten, dass es morgen mittag ausgeführt wird (heute ist der 24. November für mich):
until [[ "$(date)" =~ "25 12:00:" ]]; do
sleep 30
done
./mycommand.sh
Update : Etwas bessere Methode: Testen Sie nur die Zahlen, die Sie interessieren, mit date +FORMAT
:
until [[ $(date +%H:%M) == 21:06 ]]; do
...
at
, cron
oder jede andere echte Scheduler - Anwendung. Die Aufgabenplanung ist schwierig und kein Rad, das Sie neu erfinden sollten.
at
.
at
ist, dass die Jobs einen Neustart überstehen.
nohup
+ nichtsleep
? Warum ist es "unpassend"?