Làm thế nào tôi có thể biết nếu công việc cron hàng giờ của tôi đã chạy?


26

Tôi đã tạo ra một tập tin gọi ntpdatetrong/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

Tôi cũng đã làm Chmod 755 cho tập tin này.

Tuy nhiên, tôi không thể biết liệu tập tin đã chạy hay chưa!

Các tập tin không được tạo trong bất kỳ 3 thư mục.

Nếu tôi tự chạy cd / && run-parts --report /etc/cron.hourlythì các tệp được tạo và tôi nhận được tiếng vang.

Bất cứ ai cũng có thể giới thiệu (lý tưởng từng bước!) Để kiểm tra rằng nó đang hoạt động?

Câu trả lời:


25

Một cạm bẫy lớn đối với cron là cron chạy trong môi trường vỏ cực kỳ hạn chế, do đó, rất nhiều biến không được xuất vào môi trường, chủ yếu là $ PATH. Hãy chắc chắn rằng bạn sử dụng tất cả các đường dẫn tuyệt đối để thực thi, bao gồm các chức năng thông thường như echo, uptime, date, vv tất cả các nhu cầu sử dụng đường dẫn đầy đủ ( /bin/echo, /bin/date, /usr/bin/uptime). Để xác định đường dẫn đến một tệp thực thi, bạn có thể sử dụng whichlệnh như vậy: which echo- điều này sẽ hiển thị cho bạn đường dẫn đầy đủ đến công cụ đó.


Như đã thảo luận trong trò chuyện, cảm ơn vì điều này và tôi thực sự hy vọng nó sẽ giúp được người khác ... Trong khi tôi thực hiện con đường rơi vào ntpdate, tôi đã quá quen với Windows và echo / date chỉ là "tích hợp", tôi chỉ không Tôi nghĩ rằng tôi sẽ cần con đường đầy đủ ... tìm hiểu thêm về Linux và nó hoàn toàn có ý nghĩa!
wilhil

36

Bạn nên xem trong /var/log/syslogtệp nhật ký của bạn . Nếu một cron đã chạy, nó sẽ có một dòng như:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Để biết các mẹo khắc phục sự cố, hãy xem https://help.ubfox.com/community/CronHowto#Troubledh Boot_and_Common_Probols


Không có bất cứ điều gì trong Syslog và tôi không thể thấy bất kỳ lý do nào khiến nó thất bại từ liên kết đó :(
wilhil

1
Nếu không có mục nào trong syslog ( grep -i cron /var/log/syslog /var/log/syslog.1), hãy bắt đầu kiểm tra xem trình nền cron có đang chạy hay không: ps uww -C cronnên chứa một dòng có một quy trình.
Lekensteyn

Xin lỗi vì đã gây hiểu lầm, có các yêu cầu cho Cron trong syslog, không có gì liên quan đến lệnh này ... Tôi biết một số công việc được chạy như mỗi giờ, tôi nhận được một thông báo thư mới ... AFAIK, những công việc đang hoạt động từ crontab, không có gì trong cron.hayly đó là những gì tôi đang cố gắng để làm việc
wilhil

2

Hãy thử thay đổi dòng đầu tiên của tập lệnh của bạn (trình thông dịch) thành:

#!/bin/bash

Tôi cũng đã có vấn đề trong quá khứ, với các biến môi trường và các vấn đề PATH. Sau khi thay đổi thông dịch viên cho bashcác vấn đề của tôi đã biến mất.


1

Tôi đã thêm clearme.shtập lệnh vào/etc/cron.hourly/

Chỉ cần lọc các tác vụ CRON trong thiết bị đầu cuối với egrepawk mạnh mẽ :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

Đầu ra sẽ như sau:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Để giải thích mọi thứ từng bước một:

  1. cat / var / log / syslog - in cho tôi Nhật ký hệ thống
  2. egrep Clearme - nhưng chỉ chọn các hàng có chứa văn bản Clearme
  3. awk "{print $ 1}" - in cho tôi hàng đó chứa văn bản Clearme
  4. > ~ / Desktop / cronlog.txt - xuất kết quả trong tệp cronlog.txt nằm trên thư mục Desktop .

Bước 4 là tùy chọn. Nó sẽ chỉ in kết quả trong thiết bị đầu cuối thay vì tập tin.

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.