Ich habe ein Programm, das einige Ausgaben druckt, die ich einmal pro Stunde während des Arbeitstages auf meinem Terminal anzeigen möchte.
$ crontab -l
0 07-17 * * * /home/dat/scripts/cron.out
Syslog meldet Folgendes:
(dat) CMD (/home/dat/scripts/cron.exe)
Jun 18 12:02:01 picard CRON[10848]: (CRON) info (No MTA installed, discarding output)
Was vermisse ich?
Antworten:
Der schmutzige Weg könnte darin bestehen, die Ausgabe Ihres Programms in die pts-Datei eines bereits vorhandenen Terminals umzuleiten .
Um die pts-Datei zu kennen, geben Sie einfach
tty
command eindann wäre dein crontab:
Eine andere Möglichkeit könnte darin bestehen, das Programm als Argument des Terminals zu starten:
Wo
display
sich das X-Display befindet, auf dem Sie das Terminal anzeigen möchten,-H
soll das Terminal anweisen, geöffnet zu bleiben, nachdem der Befehl beendet wurde. Dadurch wird jedes Mal ein neues Terminal erstellt.crontab:
Wenn die Anzeige nicht vorhanden ist, wird ein Fehler von syslog protokolliert.
quelle
Cron sendet Ihnen eine E-Mail mit der Ausgabe Ihres Skripts. Leider richtet Ubuntu standardmäßig keine lokalen E-Mails ein , weshalb Cron Ihnen in den Protokollen mitteilt, dass kein MTA installiert ist und die Ausgabe verworfen wird.
Das Einrichten lokaler E-Mails kann eine Möglichkeit sein, Ihr Problem zu lösen. Anstelle einer Ausgabe in einem Terminal erhalten Sie eine E-Mail-Benachrichtigung.
Wenn Sie möchten, dass Ihr Cron-Job auf einem Terminal ausgegeben wird, müssen Sie seine Ausgabe auf das Terminal umleiten . Der Weiterleitungsteil ist einfach -
Das Problem besteht jedoch darin, herauszufinden, zu welchem Terminal umgeleitet werden soll. Darauf gibt es keine allgemeingültige Antwort. Es hängt davon ab, wie Sie das Terminal aus den Terminals auswählen möchten, bei denen Sie angemeldet sind.
Für typische Anwendungen wäre eine GUI-Benachrichtigung besser geeignet. Sie können verwenden
notify-send
. Sie müssen dieDISPLAY
Umgebungsvariable festlegen .quelle
Cron sendet die Ausgabe an einen Mailer. Wenn Sie die Ausgabe in einem Terminal anzeigen möchten, können Sie sich in einer Datei anmelden und mit tail -f die Ausgabe in dem Terminal anzeigen, für das Sie die Ausgabe anzeigen möchten
In eine Datei einloggen
0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt
Alternativen zur Protokollierung:
echo output > log.txt
oder Sie können ein unten beschriebenes Wrapper- Skript verwenden.Beispielprogramm und Wrapper-Skript:
Beispiellauf 1:
Beispiellauf 2:
Ausgabe im Terminal anzeigen:
Nachdem Sie in einem beliebigen Terminal sowohl Standard- als auch Standardfehler in einer Datei abgemeldet haben, können Sie
tail -f
eine oder beide Dateien wietail -f log.txt
odertail -f log.txt error.txt
so ausführen , dass tail die Datei (en) auf Änderungen überwacht bzw. eher befolgt. Schwanz-ManpageProtokolldateien, die anschließend angehängt werden:
Wenn später entweder log.txt oder error.txt von Ihrem Programm oder einem anderen Terminal angehängt werden
$ echo "more output" >> log.txt
, wird die Ausgabe auf dem laufenden Terminal angezeigt$ tail -f log.txt error.txt
Darüber hinaus
$ echo code red >> error.txt
ergibt sich:quelle