Pertanyaan Memperoleh output dari cron job di terminal


Saya memiliki program yang mencetak beberapa keluaran yang ingin saya munculkan di terminal saya setiap jam selama hari kerja.

$ crontab -l
0 07-17 * * * /home/dat/scripts/cron.out

syslog melaporkan hal-hal berikut:

(dat) CMD (/home/dat/scripts/cron.exe)
Jun 18 12:02:01 picard CRON[10848]: (CRON) info (No MTA installed, discarding output)

Apa yang saya rindukan?


13
2018-06-18 19:31


asal


tugas cron tidak seharusnya ditulis ke terminal - mungkin tidak ada yang tersedia. - guntbert


Jawaban:


Cara kotor bisa mengarahkan output program Anda ke file pts dari sudah ada terminal.

Untuk mengetahui file pts cukup ketik tty perintah

~$ tty
/dev/pts/4

maka crontab Anda adalah:

0 07-17 * * * /home/dat/scripts/cron.out > /dev/pts/4

Cara lain adalah dengan meluncurkan program sebagai argumen terminal:

xfce4-terminal --command=/home/dat/scripts/cron.out --display=:0.0 -H

dimana display adalah tampilan X di mana Anda ingin menunjukkan terminal, -H adalah memberi tahu terminal untuk tetap terbuka setelah perintah diakhiri. Ini akan membuat setiap kali terminal baru.

crontab:

0 07-17 * * * /usr/bin/xfce4-terminal --display=:0.0 -H --command=/home/dat/scripts/cron.out

jika tampilan tidak ada Anda akan memiliki kesalahan yang dicatat oleh syslog.


11
2018-06-18 21:19





Cron mengirimi Anda email hasil skrip Anda. Sayangnya, Ubuntu tidak mengatur email lokal secara default, itulah mengapa Cron memberitahu Anda di log “Tidak MTA terpasang, buang output ”.

Menyiapkan email lokal bisa menjadi salah satu cara untuk memecahkan masalah Anda. Alih-alih output di terminal, Anda akan mendapatkan pemberitahuan email.

Jika Anda ingin agar tugas cron Anda dikeluarkan ke terminal, Anda harus melakukannya mengalihkan outputnya ke terminal. Bagian pengalihan mudah -

0 07-17 * * * /home/dat/scripts/cron.out >/dev/pts/42 2>&1

tetapi masalahnya adalah mencari tahu terminal mana yang harus dialihkan. Tidak ada jawaban universal untuk itu, itu tergantung bagaimana Anda ingin memilih terminal di antara yang Anda masuki.

Untuk penggunaan umum, pemberitahuan GUI akan lebih sesuai. Kamu dapat memakai notify-send. Anda harus melakukannya mengatur DISPLAY variabel lingkungan.

0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"

5
2018-06-19 00:06





Cron mengirim output ke mailer. Jika Anda ingin melihat output dalam terminal maka Anda dapat masuk ke file dan menggunakan ekor -f untuk melihat output di terminal yang ingin Anda lihat hasilnya


Masuk ke file

  • Jawaban paling sederhana adalah login langsung ke file dengan entri crontab seperti:

0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt

Cara alternatif untuk masuk:

  • Jika program Anda adalah scrip yang dapat ditulis, Anda bisa memodifikasinya untuk mengarahkan output ke file log dengan. echo output > log.txt, atau Anda dapat menggunakan pembungkus skrip yang dijelaskan di bawah ini.
  • Jika program Anda adalah biner atau tidak dapat ditulis, maka Anda harus menulis pembungkus skrip untuk menangkap output ke file.

Contoh program dan skrip wrapper:

$ cat program.sh wrapper.sh 
#!/bin/bash
# sample program
echo "arg 1=$1 arg2=$2 arg3=$3"
echo "sample error" >&2 

#!/bin/bash
# sample wrapper
exec ./program.sh "$@" >log.txt 2> error.txt

Contoh run 1:

$ ./wrapper.sh 1 2 3 ; cat error.txt  log.txt 
sample error
arg 1=1 arg2=2 arg3=3

Contoh run 2:

$ ./wrapper.sh "A B C" D E ; cat error.txt log.txt 
sample error
arg 1=A B C arg2=D arg3=E

Lihat output dalam terminal:

Sekarang setelah Anda log keluar standar dan kesalahan standar ke file, di terminal apa pun, Anda dapat menjalankan tail -f pada satu atau kedua file seperti tail -f log.txt atau tail -f log.txt error.txt sehingga ekor akan mengawasi atau lebih tepatnya mengikuti file (s) untuk amandemen. tail man-page

$ tail -f log.txt  error.txt
==> log.txt <==
arg 1=1 arg2=2 arg3=3

==> error.txt <==
sample error

Logging file ditambahkan setelahnya:

Jika log.txt atau error.txt keduanya ditambahkan dari program Anda atau dari terminal lain seperti $ echo "more output" >> log.txt, output terlihat di terminal berjalan $ tail -f log.txt error.txt

==> log.txt <==
more output

Selanjutnya, $ echo code red >> error.txt hasil dalam:

==> error.txt <==
code red

2
2018-01-08 15:11