2012-12-23 26 views
10

Có cách nào để bật và tắt các tác vụ Crontab bằng Bash/Shell không?Bật/Tắt các tác vụ trong Crontab bởi Bash/Shell

Vì vậy, khi người dùng khởi động Máy chủ 1, nó sẽ bật dòng Máy chủ 1 Crontab, v.v. Và khi người dùng dừng Máy chủ 1, dòng Máy chủ 1 Crontab bị vô hiệu hóa (#). Điều này có thể thực hiện được không?

Cảm ơn trước

*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

Bạn có thể sử dụng thư mục sentinel để tất cả tập lệnh của bạn sử dụng và kiểm tra từng tập lệnh cho dù họ gửi thư đến đây - và nếu không, hãy hủy thực thi – fge

Trả lời

14
SERVERNUM=$1 

Để kích hoạt:

crontab -l | sed "/^#.*Server $SERVERNUM check/s/^#//" | crontab - 

Để vô hiệu hóa:

crontab -l | sed "/^[^#].*Server $SERVERNUM check/s/^/#/" | crontab - 

Transcript:

[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^[^#].*Server 1 check/s/^/#/' | crontab - 
[email protected]$ crontab -l 
#*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^#.*Server 1 check/s/^#//' | crontab - 
[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

Dường như không thêm/xóa số # crontab. Bật = */1 * * * * Máy chủ 1 kiểm tra Tắt = # */1 * * * * Máy chủ 1 kiểm tra – user1621988

+0

Tôi vừa thử nó trên hệ thống của mình và nó hoạt động. – Barmar

+0

Wonderfull, công trình này, vấn đề duy nhất tôi phải đối mặt là làm cho số Server hoạt động trong Bash, vấn đề với điều đó là, #. * Server $ 1 kiểm tra/không hoạt động, hoặc là "$ 1". Vậy làm cách nào để chuyển biến $ 1 thành số? – user1621988

2

Tôi khuyên bạn nên thêm công việc cron của mình vào /etc/cron.d cho mỗi tập lệnh một máy chủ. Sau đó, hãy để tập lệnh cron quét tìm một số tệp đánh dấu nếu lệnh cron được thực thi.

+0

Một sắp xếp chung khác là có một thư mục '/ path/to/servers' và sau đó chỉ là một công việc cron với' run-parts/path/to/servers'. Sau đó vô hiệu hóa một máy chủ anounts để đổi tên hoặc loại bỏ tập tin của nó trong thư mục 'servers'. ('run-parts' là Debian cụ thể, nhưng nếu nền tảng của bạn thiếu nó, nó không khó để cuộn của riêng bạn.) – tripleee

0

đây là một biến thể, tôi sử dụng một cronjob tải nó tự mỗi đêm. Tôi chỉ chỉnh sửa một tập tin và nó được tải lại lúc 10 giờ tối mỗi tối. Bạn có thể làm cho việc tải lại xảy ra thường xuyên hơn. Tôi giữ một thư mục của các tập tin cho mỗi nút. Bí quyết là đảm bảo rằng không ai nhận xét ra dòng tải lại.

0 22 * * * crontab /home/ME/cron_files/NODE 
0

Sửa lỗi nhanh chóng và bẩn, bạn có thể bật hoặc tắt quyền thực thi tập lệnh cron thích hợp.

Ví dụ: nếu bạn muốn ngăn chặn xác định vị trí tự động cập nhật cơ sở dữ liệu của nó (có thể I/O tiêu thụ):

cd /etc/cron.daily 

sudo chmod a-x locate 

Điều này có thể chống lại các khuôn khổ cron, nhưng nó là một cách nhanh chóng áp dụng và nó hoạt động trong trường hợp nhu cầu trước mắt.

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