2010-07-26 44 views
6

Tôi muốn tạo cron job chạy một script mỗi 5 giây. Thấy rằng cron job chỉ cho phép gia số phút 0-59 và cứ thế.Công việc Cron - để chạy cứ 5 giây

Tôi đã nghĩ tạo một tập lệnh khác gọi kịch bản gốc của tôi được viết bên dưới.

#!/bin/bash 

while true 
do 
# script in the same directory as this script. is this correct? 
bash makemehappy.sh 
sleep 1 
done 

Tôi bây giờ, cần biết cách chạy tập lệnh này mỗi khi tôi khởi động máy tính và khởi động nó nếu nó không chạy vì một lý do nào đó.

Tôi cũng biết rằng việc chạy tập lệnh này mỗi phút sẽ không phải là điều tốt. :)

nếu có cách dễ dàng hơn để chạy tập lệnh sau mỗi 5 giây, vui lòng thông báo.

Xin cảm ơn và cảm ơn.

+8

Cố gắng làm điều gì đó sau mỗi 5 giây thực sự là giải pháp tốt nhất cho vấn đề của bạn? – user347594

Trả lời

7

Tôi sẽ không sử dụng cron cho việc này. Tôi sẽ sử dụng tập lệnh bash đó (sử dụng đường dẫn tuyệt đối, trừ khi bạn muốn nó di chuyển và biết rằng cấu trúc thư mục sẽ được giữ nguyên).

Thay vào đó, tôi sẽ chỉ sleep 5, giống như bạn đã làm (chỉ 5 giây thay vì 1).

Theo như bắt đầu với hệ thống của bạn, điều đó phụ thuộc vào hệ thống. Trên (một số) bản phân phối Linux, có một tệp có tên là /etc/rc.local, trong đó bạn có thể thêm tập lệnh để chạy khi hệ thống khởi động. Ừm ... Tôi không nên quá chung chung, những bản phân phối mà tôi đã sử dụng có cái này. Nếu bạn đang chạy Ubuntu, không còn inittab nữa, chúng sử dụng khởi động, btw.

Vì vậy, nếu bạn có vòng lặp vô tận và mục nhập trong /etc/rc.local, thì bạn nên vàng để nó chạy vô tận (hoặc cho đến khi gặp sự cố và thoát).

+0

Bản phân phối của tôi là ubuntu? Tôi không thể tìm thấy rằng tập tin rc.local trong thư mục vv. đề xuất? – myusuf3

+0

phiên bản nào? (cat/etc/issue) – Tim

+0

10.04 Tôi đã tìm ra nó. :) bằng cách thêm nó vào init.d và cập nhật update-rc.d – myusuf3

2

Hãy thử sử dụng anacron hoặc tốt hơn là một tập lệnh init để bắt đầu khi máy tính khởi động.

Nếu bạn muốn tập lệnh "tự khởi động lại", bạn sẽ cần chạy vài phút một vài lần để kiểm tra bản gốc vẫn đang chạy. Điều này có thể được thực hiện bằng inittab (/etc/inittab) hoặc trên Ubuntu, /etc/event.d. Hãy thử man 5 inittab, xem xét tùy chọn 'respawn'.

1

Một số cron s có một thông số thời gian @reboot (bao gồm tất cả các trường thời gian và ngày tháng). Nếu của bạn có, bạn có thể sử dụng nó. Nếu đây là một dịch vụ "hệ thống" (thay vì một cái gì đó đang chạy cho chính bạn), các giải pháp khác ở đây có lẽ tốt hơn.

1

Init script khởi động tốt nhưng không phát hiện được nếu quá trình bị lỗi và phải được khởi động lại. supervisord thực hiện công việc tuyệt vời để phát hiện các quá trình không thành công và khởi động lại chúng. Tôi muốn giới thiệu một kịch bản với một vòng lặp 5 giây như @Tim được mô tả, nhưng quấn supervisord xung quanh nó để đảm bảo nó tiếp tục chạy.

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