Nhận đầu ra từ một công việc định kỳ trên thiết bị đầu cuối


15

Tôi có một chương trình in một số đầu ra mà tôi muốn bật lên trên thiết bị đầu cuối của mình mỗi giờ một lần trong ngày làm việc.

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

syslog báo cáo như sau:

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

Tôi đang thiếu gì?


công việc cron không được phép ghi vào một thiết bị đầu cuối - có thể không có sẵn.
guntbert

Câu trả lời:


14

Cách bẩn có thể là chuyển hướng đầu ra của chương trình của bạn sang tệp pts của thiết bị đầu cuối đã tồn tại .

Để biết tập tin pts chỉ cần gõ ttylệnh

~$ tty
/dev/pts/4

sau đó crontab của bạn sẽ là:

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

Một cách khác có thể là khởi chạy chương trình như là một đối số của thiết bị đầu cuối:

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

nơi displaylà màn hình hiển thị X nơi bạn muốn hiển thị các thiết bị đầu cuối, -Hlà để nói với nhà ga ở lại mở sau khi lệnh được chấm dứt. Điều này sẽ tạo ra mỗi khi một thiết bị đầu cuối mới.

crontab:

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

nếu màn hình không xuất hiện, bạn sẽ gặp lỗi do syslog ghi lại.


6

Cron gửi email cho bạn đầu ra của tập lệnh của bạn. Thật không may, Ubuntu không thiết lập thư cục bộ theo mặc định , đó là lý do tại sao Cron cho bạn biết trong nhật ký Nhật ký Không cài đặt MTA , loại bỏ đầu ra.

Thiết lập thư cục bộ có thể là một cách để giải quyết vấn đề của bạn. Thay vì đầu ra trong một thiết bị đầu cuối, bạn sẽ nhận được thông báo qua email.

Nếu bạn muốn công việc định kỳ của mình xuất ra một thiết bị đầu cuối, bạn sẽ phải chuyển hướng đầu ra của nó đến thiết bị đầu cuối. Phần chuyển hướng rất dễ dàng -

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

nhưng vấn đề là tìm ra thiết bị đầu cuối nào để chuyển hướng đến. Không có câu trả lời chung cho điều đó, nó phụ thuộc vào cách bạn muốn chọn thiết bị đầu cuối trong số những thiết bị bạn đã đăng nhập.

Đối với việc sử dụng thông thường, thông báo GUI sẽ phù hợp hơn. Bạn có thể sử dụng notify-send. Bạn sẽ cần đặt DISPLAYbiến môi trường .

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

2

Cron gửi đầu ra cho một người gửi thư. Nếu bạn muốn xem đầu ra trong một thiết bị đầu cuối thì bạn có thể đăng nhập vào một tệp và sử dụng đuôi -f để xem đầu ra trong thiết bị đầu cuối mà bạn muốn xem đầu ra


Đăng nhập vào một tập tin

  • Câu trả lời đơn giản nhất là đăng nhập trực tiếp vào một tệp có mục crontab như:

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

Các cách khác để đăng nhập:

  • Nếu chương trình của bạn là một tập lệnh có thể được ghi vào, bạn có thể sửa đổi nó để chuyển hướng đầu ra thành một tệp nhật ký. echo output > log.txthoặc bạn có thể sử dụng tập lệnh bao bọc được mô tả bên dưới.
  • Nếu chương trình của bạn là nhị phân hoặc không thể ghi được, thì bạn phải viết tập lệnh bao bọc để thu đầu ra vào một tệp.

Ví dụ chương trình và tập lệnh bao bọc:

$ 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

Ví dụ chạy 1:

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

Ví dụ chạy 2:

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

Xem đầu ra trong thiết bị đầu cuối:

Giờ đây, khi bạn đăng nhập cả lỗi tiêu chuẩn và lỗi tiêu chuẩn vào một tệp, trong bất kỳ thiết bị đầu cuối nào, bạn có thể chạy tail -ftrên một hoặc cả hai tệp như vậy tail -f log.txthoặc tail -f log.txt error.txtđuôi đó sẽ xem hoặc theo dõi (các) tệp để sửa đổi. đuôi người đàn ông

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

==> error.txt <==
sample error

Các tệp nhật ký được nối thêm sau đó:

Nếu log.txt hoặc error.txt sau đó được nối từ chương trình của bạn hoặc từ thiết bị đầu cuối khác như thế $ echo "more output" >> log.txt, thì đầu ra sẽ được nhìn thấy trên thiết bị đầu cuối đang chạy$ tail -f log.txt error.txt

==> log.txt <==
more output

Hơn nữa, $ echo code red >> error.txtkết quả trong:

==> error.txt <==
code red
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.