Zeitplan cron-job, um öffnen Sie das Terminal und führen Sie den Befehl sequentiell
Ich geplant einen cron-job auf einem Mac das Terminal öffnen jeden Tag um 11 Uhr wie folgt:
0 23 * * * open -a Terminal
Funktioniert Super! Aber was ich möchte ist nicht nur das Terminal öffnen, aber auch einen einfachen Befehl innerhalb es. Von der Suche online, es sieht aus, als wenn die cron-Befehle können verkettet werden mit &&
:
0 23 * * * open -a Terminal && echo 'Hello, world!'
Dies jedoch geändert cron-job öffnet sich nur Terminal, ohne den zweiten Befehl gibt. Irgendwelche Gedanken auf, wie kann ich den cron-job, beides zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Super Antworten bereits durch pah und Sameer Naik, aber ich landete mit eine noch einfachere Lösung ist die Verwendung von AppleScripts, inspiriert von SO, die Antwort auf eine ähnliche Frage.
Folgende Antwort [nach dem Trennzeichen] wird davon ausgegangen, dass Sie wollen, um den zweiten Befehl ausführen, innerhalb [inside] das Terminal. Ansonsten brauchen Sie nur auf die swap-Kommandos auf Ihre cronjob (da aktuell, wie Sie es haben, die
echo
wird nur ausgeführt, nachTerminal
beendet), wie:Nun, angenommen Sie wollen den Befehl ausführen innerhalb die neu gespawnt terminal:
Ich bin mir nicht bewusst, dass
Terminal
Anwendung (aus/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
) akzeptiert [d.h., interpretiert] alle BefehlszeilenArgumente, noch wird es etwas zu Lesen von [standard-Ausgabe redirected to] standard-Eingabe.Was du tust mit
open -a Terminal && echo 'Hello, world!'
ist im Grunde Aufruf derTerminal
Anwendung und [bei Erfolg] print'Hello, world!'
auf der gleichen shell aufgerufen den vorherigen Befehl (derTerminal
). Dies ist Analog zu der Ausführung zwei separate Befehle in der gleichen shell, sondern nur die Ausführung der neueste, wenn der erste erfolgreich ist.Wenn Sie möchten, dass ein bestimmter Befehl (sagen
echo 'Hello, world!'
), um jedes mal ausgeführt, wennbash
(derzeit der Standard-osx-shell) geladen ist für den aktuellen Benutzer (wie in jeder Zeit Benutzer öffnet einenTerminal
), können Sie diesen Befehl, um~/.bash_profile
. Zum Beispiel:Nun, wenn Sie öffnen eine
Terminal
der Befehl `echo 'Hallo, Welt!'" wird ausgeführt werden.Seit der neuesten version von Mac OS x nicht enthalten eine
~/.bash_profile
standardmäßig für alle Benutzer, Sie können dies nutzen und ändern Sie Ihre crontab:Diese im Grunde ersetzen Sie den Inhalt
~/.bash_profile
für jedes mal das crontab-Eintrag ausgeführt und öffnet dieTerminal
.Den Nachteil, das zu tun diese Art und Weise ist, dass, was Sie im inneren
~/.bash_profile
wird ausgeführt für jeden geöffnetTerminal
- unabhängig von Wesen, die aus der crontab, oder jede andere kann der Benutzer geöffnet hat.Um dieses Problem zu lösen, können Sie auch entfernen, die
~/.bash_profile
- Datei von innerhalb es, indem Sie einen trailingrm -f ~/.bash_profile
Befehl nach derecho 'Hello, world!'
:Dies führt dazu, dass, wenn
Terminal
öffnet sich und fordertbash
alle~/.bash_profile
Befehle ausgeführt werden, einschließlich des abschließendenrm -f ~/.bash_profile
, so dass der nächste Aufruf vonTerminal
wird nicht trigger Ihr Befehl erneut aus, da die~/.bash_profile
ist nicht mehr vorhanden.Sidenote: Wenn, aus irgendeinem Grund, Sie haben bereits ein
~/.bash_profile
- Datei, anstatt Sie zu ersetzen den gesamten Inhalt des es und entfernen Sie es nach, Sie können das original-backup, hängen Sie Ihre Befehle [einschließlich der zum wiederherstellen der ursprünglichen Datei] und öffnen Sie das terminal. Aber ich denke, dies ist nicht der Fall (jedenfalls, wenn es ist, kann ich verlängern diese Antwort mit den details).Können Sie ein Skript erstellen sagen my_cron_job.sh und führen Sie es über cron
0 23 * * * my_cron_job.sh
Geben Sie den absoluten Pfad zu dem Skript, z.B. /users/your_user_name/scripts/my_cron_job.sh