Thông tin (CRON) (Không cài đặt MTA, loại bỏ đầu ra) Lỗi lỗi trong syslog


198

Tôi có một bản cài đặt mới Ubuntu 12.04.1 LTS một số máy chủ.

Tôi chưa thêm bất kỳ công việc định kỳ nào hoặc chỉnh sửa crontab của mình trên các máy chủ đó, tuy nhiên, cùng một lúc cho mỗi máy, tôi nhận được 75% CPU tăng đột biến và thông tin sau trong syslog của tôi tại thời điểm tăng đột biến:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

Tôi đã cài đặt hoàn chỉnh đơn và đang chạy một máy chủ web stack dịch vụ.

Cách tốt nhất để tôi ngăn chặn điều này xảy ra là gì? Tôi muốn có thể loại bỏ CPU tăng đột biến.


Mỗi ngày vào lúc 6:25? Đó là các tập lệnh từ /etc/cron.daily/. Tôi chỉ có một cố gắng để gửi thư: cuộc thi phổ biến. Nhìn qua các tập lệnh của bạn và xem tập lệnh nào đang cố gắng gửi thư? Điều đó nên thu hẹp nó xuống. Sau đó, 'chmod 0644 /etc/cron.daily/script-name' để ngăn thực thi.

Câu trả lời:


173

Linux sử dụng thư để gửi thông báo cho người dùng. Hầu hết các bản phân phối Linux đều có dịch vụ thư (bao gồm MTA) được cài đặt. Ubuntu không mặc dù.

Bạn có thể cài đặt một dịch vụ thư, ví dụ như postfix, để giải quyết vấn đề này.

sudo apt-get install postfix

Hoặc bạn có thể bỏ qua nó. Tôi không nghĩ rằng việc cron không thể gửi tin nhắn có liên quan gì đến sự tăng đột biến của CPU (điều đó liên quan đến công việc cơ bản mà cron đang chạy). Có thể an toàn nhất để cài đặt MTA và sau đó đọc qua các tin nhắn ( muttlà một trình đọc thư hệ thống tốt).


5
Postfix là một điều tốt để cài đặt? MTA nào dễ sử dụng nhất?
endolith

2
postfix là máy chủ thư được sử dụng rộng rãi nhất cho linux, hãy bám lấy nó
Rápli András

5
Cần chỉ ra rằng để sử dụng với cron (nghĩa là nếu bạn không thực sự muốn gửi email ra ngoài) trong quá trình cài đặt, bạn nên trả lời để chỉ định cấu hình cho sử dụng cục bộ.
steffen

cách duy nhất tôi biết để kiểm tra thư được mailcung cấp bởi mailutils(debian), nếu có cách nào tốt hơn được xây dựng trong postfix?
ThorSummoner

79

Điều này xảy ra bởi vì các công việc cron của bạn đang tạo đầu ra và sau đó cron daemon cố gắng gửi email đầu ra đó cho bạn (tức là root). Nếu bạn không cần đầu ra đó, cách dễ nhất để giải quyết vấn đề này là loại bỏ nó tại crontab:

sudo crontab -e

và thêm >/dev/null 2>&1vào mọi công việc:

* * * * * yourCommand >/dev/null 2>&1

10
Vấn đề với cách tiếp cận này là nó không giải thích được việc sử dụng CPU cao. Cron rõ ràng đang cố gắng để giao tiếp và điều này về cơ bản chỉ là bỏ qua đầu ra. Tôi có xu hướng xử lý đầu ra hơn là loại bỏ nó, chỉ trong trường hợp có thông tin gỡ lỗi hữu ích.
Oli

1
Oli, mặc dù đây là một câu hỏi cũ, tôi đang gặp vấn đề chính xác tương tự nhưng đó là trên Raspberry PI. Tôi thấy một loạt các No MTA installed, discarding outputthông báo trong nhật ký và chương trình của tôi cuối cùng tự dừng chạy. Tôi tin rằng đó là do CPU tăng đột biến. Có vẻ như tất cả các câu trả lời được đăng cho câu hỏi này dường như bỏ qua điều đó.
ThN

4
Để giữ đầu ra, đặt lệnh trong một tập lệnh, và thiết bị xuất chuẩn ống và thiết bị xuất chuẩn logger. Ví dụ , yourCommand >/dev/null 2>&1 | logger -t mycmd. Điều này sẽ đặt đầu ra trong syslog để giữ an toàn và ngăn chặn các khiếu nại MTA.
CivilMeierFan

56

Trong trường hợp của tôi, thông báo đã gợi ý về vấn đề quyền với tập lệnh bash, nhưng tôi không thể nhìn thấy nó cho đến khi tôi cài đặt MTA.

Theo đề nghị tôi đã chạy:

sudo aptitude install postfix

Tôi đã chọn "Cục bộ" trong khi thiết lập và sau khi chạy lại công việc định kỳ:

sudo tail -f /var/mail/<user>

Trong trường hợp của tôi, tôi đã thay thế

<user>

với "gốc".

Sau đó tôi đã có thể thấy đầu ra lỗi liên quan đến quyền.


3
Cảm ơn bạn đã bình luận thêm về cách kiểm tra hộp thư để xem lỗi từ công việc!
Stuart Allen

32

Như đã nêu trong một câu trả lời trước đó, điều này xảy ra bởi vì các công việc định kỳ của bạn đang tạo ra đầu ra, và sau đó trình nền cron cố gắng gửi email đầu ra đó cho bạn. Nếu bạn không muốn (hoặc không thể) cài đặt MTA, nhưng bạn muốn xem đầu ra, bạn có thể chuyển hướng đầu ra của công việc định kỳ sang tệp nhật ký. Chỉnh sửa tập tin crontab của bạn với

crontab -e

(sử dụng sudonếu sự cố xảy ra với crontab của root) và thêm sau mỗi lệnh, như thế này:>> /some/log/file 2>&1

0 3 * * * cmd   >> / some / log / file 2> & 1

Nếu có nhiều lệnh trên một dòng, ngăn cách bởi ;,  &&  hoặc ||, bạn nên làm như trên cho từng lệnh, như thế này:

0 3 * * * cmd 1   >> / some / log / file 2> & 1;  cmd 2   >> / some / log / file 2> & 1

hoặc nhóm chúng, như thế này:

0 3 * * * ( cmd 1 ;   cmd 2 )   >> / some / log / file 2> & 1

Nếu bạn muốn bỏ qua thiết bị xuất chuẩn và chỉ chụp stderr, hãy sử dụng thay thế. Đặt tệp nhật ký bất cứ nơi nào bạn muốn - thư mục chính của bạn , hoặc ngay cả khi bạn chắc chắn rằng bạn sẽ không cần phải giữ nó.> /dev/null 2>> /some/log/file/var/log/tmp

Sau đó nhìn vào tệp nhật ký sau khi công việc chạy.


28

Trong crontab thêm điều này như là dòng đầu tiên:

MAILTO=""

Điều này sẽ ngăn cron cố gắng gửi e-mail.


4
Đừng để lại bất kỳ bình luận nào ( #) sau khi MAILTO=""nó không hoạt động
SBF

23

Nếu bạn không muốn cài đặt một MTA (mà hiện tại tôi không có nhu cầu), bạn có thể chuyển kết quả của công việc định kỳ vào một tệp nhật ký.

sudo crontab -e

sau đó với công việc định kỳ của bạn sẽ như thế này.

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

sau đó bạn có thể chỉ cần theo dõi nhật ký và xem những gì đã xảy ra

sudo tail -f -n 50 /var/log/somelogfile.log

Đây là những gì tôi đã và đang làm trên bất kỳ máy chủ nào tôi thấy thông báo đó trong syslog


Tôi đã làm điều này, nhưng không có đăng nhập được thêm vào tập tin.
cướp biển

Bạn có chắc chắn rằng công việc cron như đang chạy?
Andrew MacNaughton

Có, nhật ký hệ thống cho thấy nó đang được bắt đầu.
cướp biển

1
Bạn cần '2> & 1' ở cuối dòng để nắm bắt đầu ra để stderr vào tệp.
MattSmith

15

Đây là một câu hỏi cũ nhưng có một câu trả lời bổ sung hữu ích trong một số trường hợp.

Đưa đầu ra của lệnh cron của bạn đi qua loggerđể chúng kết thúc trong syslog.

Nó dễ hơn một chút so với cài đặt postfix và nó đặt đầu ra này vào syslog cùng với các bản ghi khác của bạn. Lệnh này sẽ chụp stdout AND stderr để bạn không nhìn thấy No MTA installedthông báo và bạn sẽ thấy tất cả đầu ra của mình trong syslog.

Ví dụ nhập cron:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

Bạn có thể xem nhật ký bằng thẻ của mình mycmdbằng cách sử dụng:

grep 'mycmd' /var/log/syslog

Do ống làm việc trong cron công việc?
CivilMeierFan

10

Một tác dụng phụ của việc thêm /dev/null 2>&1vào lệnh cron job là nó sẽ loại bỏ cả hai STDERRSTDOUT(Lỗi tiêu chuẩn cũng như đầu ra). Điều này hoạt động tốt nếu bạn không muốn bất kỳ email từ cron. Nhưng nếu bạn muốn các lỗi của bạn được gửi qua email cho bạn, >/dev/nullthay vào đó hãy sử dụng . Đọc bài đăng trên blog này để được giải thích thêm .

Bạn vẫn sẽ cần phải cài đặt MTA (đại lý chuyển thư) để gửi email lỗi. Postfix đủ đơn giản để cài đặt với:sudo apt-get install postfix


Theo như tôi hiểu thì '> / dev / null' sẽ chỉ gửi chúng và '> / dev / null 2> & 1' sẽ khắc phục mọi lỗi? Tôi sẽ phải sử dụng cái gì để nhận lỗi trong nhật ký nhưng không có thư? Bây giờ tôi không nhận được thư (như tôi muốn) nhưng xấu xí 'không có MTA'
Hố

2
afaik, không có cách nào để đăng nhập đầu ra ngoài việc gửi nó đến email. Điều gần nhất bạn có thể làm là thiết lập postfix cho việc gửi thư cục bộ (nếu bạn chạy "sudo apt-get install postfix", nó sẽ nhắc bạn xem bạn có muốn thiết lập phân phối cục bộ hay không. tốt hơn rất nhiều. Bất cứ khi nào tôi đăng nhập qua ssh, tôi sẽ thấy một email mới trên máy nếu một công việc trước đó không thành công. Tôi thấy thuận tiện hơn là phải kiểm tra nhật ký.
paneer_tikka 7/214

2
  1. Đầu tiên, cài đặt postfix, có thể giải quyết vấn đề

    sudo apt-get install postfix
    
  2. Nếu Ubuntu, bạn có thể chỉnh sửa crontabtệp

    sudo vim /etc/crontab
    
  3. Chú ý , chỉnh sửa tệp trên cùng , không phải bất kỳ mã nào trong dòng đầu tiên và nhập

    MAILTO=root // current system user
    
  4. Khi cronthực hiện bất kỳ nhiệm vụ nào, bạn sẽ nhận được email

    mail
    

1
Câu trả lời của bạn có vẻ tốt, nhưng tôi không thể hiểu được tất cả các hướng dẫn. Có lẽ bạn có thể cải thiện nó.
zx485


1

Tôi gặp vấn đề này khi sử dụng các công cụ Kitical Docker .
Đi đến hộp đựng magento và bấm vào exe.

Sau đó chạy

apt-get update

Đây là nếu bạn đang cố gắng để magento chạy trên kitical. Nhật ký sẽ hiển thị lỗi này trên máy ảo:

cần cập nhật.

Xin lỗi nếu điều này làm bạn mất, nhưng đó là cách nó hoạt động. Bạn tiếp tục bị lạc, nhưng chỉ cần đọc về nó và các mảnh sẽ đến với nhau một ngày. Kiên nhẫn.

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.