2009-06-17 31 views
12

*/5 * * * * lệnh của tôiTại sao mục nhập cron này được thực thi hai lần?

Mục này hoạt động nhưng cứ sau 5 phút nó được thực hiện hai lần, tại sao?

Trong thư mục/var/log/cron nó cho thấy:
Jun 16 22:20:01 Kiểm tra crond [12.512]: (root) CMD (lệnh của tôi)
Jun 16 22:20:01 Kiểm tra crond [12.516] : (root) CMD (lệnh của tôi)

Vì vậy, nó không phải từ hai người dùng.
Chỉ được nhập một lần với crontab -e -u root

Lệnh này là lệnh php.

+0

Có thể trùng lặp [lý do tại sao công việc cron của tôi thực thi nhiều lần?] (Https://stackoverflow.com/questions/24012666/why-my-cron-job-executing-multiple-times) –

Trả lời

32

Không nội dung nào trong mô tả đưa ra lý do cho việc thực thi hai lần. Nhìn ở nơi khác.

  • Hai người dùng có gọi không?
  • Được nhập hai lần chưa?
  • Bản thân nó có gọi là chính nó không?
  • Nó có được đặt trong điều kiện chuyển động để lặp lại không?

Nếu đó là tập lệnh hệ vỏ bạn đang thực thi, hãy thêm nó whoamidate vào tệp nhật ký. Bạn sẽ có thể khai thác lý do.

CẬP NHẬT

Loại ps -A, hãy chắc chắn crond không chạy hai lần.

+0

xin xem câu hỏi được cập nhật – erotsppa

+1

bạn không trả lời: nó tự gọi nó? nó có đặt trong điều kiện chuyển động để lặp lại không? –

+0

Xem câu trả lời cập nhật :) –

0

Để chắc chắn đó không phải là mục nhập crontab khiến nó chạy hai lần. Cách nhanh nhất để tìm hiểu những gì đang xảy ra là thêm một số gỡ lỗi vào tập lệnh cron job. Nếu bạn không làm gì cả, sau đó theo mặc định sản lượng cron sẽ được gửi đến [email protected] (trừ khi bạn đã cấu hình này là khác nhau), vì vậy giả sử bạn có quyền truy cập root, thêm một số thông tin gỡ lỗi để kịch bản, chẳng hạn như:

echo "Script starting" 
date 
whoami 

và xem kết quả đầu ra. Điều này sẽ giúp bạn bắt đầu tìm hiểu cách thức này được gọi hai lần.

3

Nếu đó là lệnh cho ứng dụng bạn đã cài đặt, có thể nó đã thêm cùng một mục nhập vào /etc/crontab hoặc /etc/cron.d/<something>.

+0

Đây là vấn đề của tôi - tôi đã nhập thủ công nó vào crontab gốc, nhưng cũng có một tệp trong '/ etc/cron.d' gọi một phiên bản tương tự nhưng không chính xác giống với cùng một cuộc gọi. Đuôi rượt giờ đã kết thúc, trở lại công việc trong tầm tay. :) –

0

Dường như bạn có hai chạy crond, người ta với PID 12.512 và một với PID 12516.

3

Tôi xác nhận - cron của tôi cũng chạy hai lần ...

Jul 24 14:40:01 localhost cron[2713]: (root) CMD (/etc/apache2/generator/reloader.do) 
Jul 24 14:41:01 localhost cron[9481]: (root) CMD (/etc/apache2/generator/reloader.do) 
Jul 24 14:41:01 localhost cron[10724]: (root) CMD (/etc/apache2/generator/reloader.do) 
Jul 24 14:42:01 localhost cron[20380]: (root) CMD (/etc/apache2/generator/reloader.do) 
Jul 24 14:42:01 localhost cron[20832]: (root) CMD (/etc/apache2/generator/reloader.do) 

crontab của tôi

grep -R/var/spool/-e reloader

/var/spool/cron/crontabs/root:* * * * * /etc/apache2/generator/reloader.do 

sản lượng:

whoami 
date 
------ 

đầu ra:

root 
root 
Tue Jul 24 14:46:02 CEST 2012 
--------- 
Tue Jul 24 14:46:03 CEST 2012 
--------- 

workaround hiện tại của tôi là:

if [ -f /etc/apache2/generator/reloader.lock ] 
then 
exit 
fi 
touch /etc/apache2/generator/reloader.lock 
/etc/apache2/generator/reloader 
rm /etc/apache2/generator/reloader.lock 

Nhưng nó không phải là câu trả lời tại sao đó là xảy ra ...

System - gentoo Cron - vixie-cron

phần của ps aux wwf đầu ra (ăn trưa bên cron nhiệm vụ)

root  10843 0.0 0.0 16480 560 ?  Ss Jun06 0:01 /usr/sbin/cron 
root  29797 0.0 0.0 25020 964 ?  S 15:08 0:00 \_ /usr/sbin/cron 
root  29799 0.0 0.0 9188 1228 ?  Ss 15:08 0:00  \_ /bin/bash /etc/apache2/generator/reloader 
root  29822 0.0 0.0 14800 988 ?  R 15:08 0:00   \_ ps aux wwf 
------ 
root  8215 0.0 0.0 16480 836 ?  Ss 14:23 0:00 /usr/sbin/cron 
root  31419 0.0 0.0 25020 968 ?  S 15:08 0:00 \_ /usr/sbin/cron 
root  31423 0.0 0.0 9188 1228 ?  Ss 15:08 0:00  \_ /bin/bash /etc/apache2/generator/reloader 
root  31431 0.0 0.0 14804 1004 ?  R 15:08 0:00   \_ ps aux wwf 

EDIT:

tôi đã thông báo, rằng một trong những báo cáo quá trình cron Jun06 như ngày bắt đầu (hôm nay là Jun24)

root  10843 0.0 0.0 16480 560 ?  Ss Jun06 0:01 /usr/sbin/cron 
root  8215 0.0 0.0 16480 836 ?  Ss 14:23 0:00 /usr/sbin/cron 

báo cáo quá trình thứ hai một cách chính xác (server uprime là ~ 40 phút - tôi đã khởi động lại nó mới đây) Một thông tin quan trọng - nó là V-server chạy trên máy chủ.

Không có vấn đề gì tôi (/etc/init.d/vixie-cron khởi động lại) nó bắt đầu với cùng PID

SOLVED:

tôi đã tìm thấy lý do. Một máy chủ V được chạy hai lần, với ngữ cảnh khác nhau. có thể giải thích - một người nào đó đã thay đổi bối cảnh trong khi máy đang chạy, và kết quả là, không phải tất cả các quá trình bị thiệt mạng, và những gì; Hơn nữa - họ đã ảnh hưởng đến thể hiện mới của vserver (bối cảnh 303 và 3031):

root     10843  3031 developer      0.0  0.0  16480   560 ?        Ss   Jun06   0:01 /usr/sbin/cron 
root     16509   303 developer      0.0  0.0  16480   836 ?        Ss   15:18   0:00 /usr/sbin/cron 

Tôi đã TERM cũ quá trình, và vấn đề được giải quyết.

0

Tôi sử dụng OpenWrt.

Tôi có cùng một vấn đề, nhưng tôi chỉ có một cron: ps | grep crond:

31447 root  1508 S /usr/sbin/crond -c /etc/crontabs -l 8 
31454 root  1500 S sh -c ps | grep crond 
31456 root  1496 S grep crond 

logread | grep cron

May 27 13:15:01 decibox cron.info crond[31447]: crond: USER root pid 1594 cmd /root/check_connect.php.sh 
May 27 13:20:01 decibox cron.info crond[31447]: crond: USER root pid 2103 cmd /root/check_connect.php.sh 
May 27 13:20:01 decibox cron.info crond[31447]: crond: USER root pid 2325 cmd /root/check_connect.php.sh 
May 27 13:25:01 decibox cron.info crond[31447]: crond: USER root pid 2880 cmd /root/check_connect.php.sh 
+0

Điều này không trả lời câu hỏi. Hoặc là bình luận về câu hỏi ban đầu hoặc nếu tình huống của bạn khác đi, hãy bắt đầu một câu hỏi của riêng bạn. –

4

Wget trong crontab thường có giới hạn là 15 phút. Trong trường hợp của chúng tôi đây chỉ là trường hợp, và sau 15 phút công việc kết thúc với một thời gian chờ và sau đó chạy lại ngay lập tức. Vì vậy, giải pháp cho điều này là để thiết lập cronjob trong crontab như thế này:

1 2 * * * root wget --read-timeout=3600 -O - 'http://cron-job-url' >/dev/null 2>&1 

...thay vì

1 2 * * * root wget -O - 'http://cron-job-url' >/dev/null 2>&1 

Vì vậy, wget là điều. Ý nghĩa 3600 = 1 giờ rồi. Hoặc nhiều hơn nếu bạn cần!

0

Tôi đã gặp vấn đề tương tự một lần, trong trường hợp của tôi là tôi khởi tạo dịch vụ cron hai lần do nhầm lẫn. Sau khi tôi ngừng cron # /etc/init.d/crond stop và bắt đầu lại một lần nữa # /etc/init.d/crond start, nó hoạt động hoàn hảo.

Tôi hy vọng điều này có thể giúp mọi người.

Các vấn đề liên quan