Vô hiệu hóa mạnh mẽ kịch bản cụ thể. {Hàng giờ, hàng ngày, hàng tuần}


25

Trên các hệ thống khác nhau mà tôi quản lý, có các tập lệnh cron được chạy thông qua /etc/cron.{hourly,daily,weekly}bố cục thường được sử dụng . Điều tôi muốn biết là liệu có bất kỳ chức năng 'vô hiệu hóa tập lệnh' chung này hay không.

Rõ ràng, chỉ cần xóa một cái gì đó ra khỏi một thư mục nhất định sẽ vô hiệu hóa nó, nhưng tôi đang tìm kiếm một giải pháp lâu dài hơn. Xóa /etc/cron.daily/slocatesẽ hoạt động để vô hiệu hóa hàng đêm updatedbtrên máy chủ của tôi (nơi tôi không bao giờ sử dụng slocate), nhưng lần tới khi tôi nâng cấp gói slocate, tôi chắc chắn rằng nó sẽ xuất hiện trở lại.

Hai bản phân phối mà tôi quan tâm nhất là Gentoo và OpenSUSE, nhưng tôi hy vọng có một cơ chế được triển khai rộng rãi. Cả hai distro như tôi có chúng đều sử dụng vixie-cron (không chắc nó có vấn đề gì).

Câu trả lời:


45

Bạn sẽ có thể chmod -x scriptnamevô hiệu hóa một tập lệnh nhưng để tập tin vào vị trí.


5
Điều đó có thể hoặc không thể hoàn tác bởi hệ thống quản lý gói. Bạn có thể làm cho điều này mạnh mẽ hơn bằng cách làm chattr +i scriptnamesau chmod.
mc0e

@ mc0e cảm ơn vì đã dạy tôi về các tập tin bất biến, nhưng như ai đó đã từng nói , chúng thật đáng sợ . Nếu tôi quên những gì tôi đã làm, nó có thể dẫn đến một số rắc rối rất khó chịu.
Jonathan Y.

2
@JonathanY.: Đó là những gì lsattrdành cho - để loại bỏ sự đáng sợ (nó liệt kê các tùy chỉnh của một tệp).
Tạm dừng cho đến khi có thông báo mới.

1
DW chắc chắn, nhưng biết cách xem xét các thuộc tính tệp khi có gì đó không thể giải thích được (giống như trong luồng mà tôi liên kết đến) là cú hích thực sự ở đây.
Jonathan Y.

@JonathanY. Vì vậy, bây giờ bạn biết. :-) Trong mọi trường hợp, tôi nghĩ rằng bit 'đáng sợ' trong luồng được liên kết đó đề cập đến một lỗi pacman, chứ không phải bản thân nó
mc0e

9

phần chạy không thực thi các công việc có dấu chấm trong tên của chúng, vì vậy

mv /etc/cron.d/job /etc/cron.d/job.disabled

sẽ thực hiện các mẹo.


1
Thật không may, điều đó sẽ có cùng một vấn đề khi nâng cấp chương trình - nó sẽ kiểm tra xem liệu công việc định kỳ có tồn tại hay không và vì nó không tồn tại theo tên ban đầu của nó, nên nó sẽ được tạo lại.
Jenny D nói Phục hồi lại

2
Quay trở lại khi nâng cấp chương trình là tác dụng phụ của công cụ gói đang sử dụng, không thể khắc phục bằng các phương tiện đơn giản và không phải là lỗi của Cron. Một số hệ thống gói nuke và mở các tệp trước đó, các hệ thống khác khác với mới và cũ và nhắc bạn nếu có thay đổi để xem xét. Bất kể, các bản cập nhật tạo ra hành vi ngoài ý muốn sẽ là một phần bực bội, nhưng là một phần thường xuyên của quản trị hệ thống unix tại thời điểm này. Đơn giản là có quá nhiều gói di chuyển quá nhanh để thường xuyên xem xét tất cả các thay đổi về tác động của chúng trong từng môi trường riêng lẻ.
Peelman

Trong Debian, có một khái niệm về chuyển hướng tệp - tức là bạn có thể đổi tên tệp một cách hiệu quả trong khi nó vẫn được quản lý gói quản lý. Có lẽ một cơ chế tương tự tồn tại trong Gentoo và / hoặc SUSE?
Bass

9

Thường cron.dailyđược gọi thông /etc/crontabqua một dòng như vd

run-parts --report /etc/cron.daily

man run-parts cung cấp cho bạn các tùy chọn.

run-parts --test /etc/cron.daily cho thấy những công việc được thực hiện mà không chạy chúng.

Tôi thích tạo một thư mục con 'Vô hiệu hóa' và chuyển công việc của mình đến đó.

Trong mọi trường hợp nếu bạn cập nhật một gói, có khả năng công việc được đưa vào vị trí một lần nữa hoặc các bit 'x' bị loại bỏ được khôi phục


1

Bạn có thể loại bỏ gói slocate nếu bạn không bao giờ sử dụng nó.


Đó chỉ là một ví dụ, nhưng vẫn là lời khuyên tốt, cảm ơn. (Tôi nghĩ một cái gì đó có thể phụ thuộc vào slocate, nhưng không có gì xuất hiện.)
benizi

Hủy bỏ slocate, và cài đặt mlocate thay thế. Tốt hơn nhiều.
mc0e

1

Nếu bạn sử dụng cfengine ( https://cfengine.com/ ), bạn có thể thực hiện việc này bằng cách vô hiệu hóa. Bạn chỉ cần viết một tệp lời hứa cho một nhóm các máy chủ lưu trữ và nó sẽ tự áp dụng trong lần chạy cfagent tiếp theo. Làm điều này với con rối hoặc đầu bếp hoặc bất cứ điều gì cũng nên khá đơn giản.


Hấp dẫn. Tôi chỉ gặp các công cụ quản lý cấu hình rất hữu hình. Tôi đang tìm kiếm một giải pháp "Tôi có một số hệ thống giống như Unix" tùy ý.
benizi

1

Các /etc/cron.d Daily et. al. các tập lệnh được chạy bởi một tập lệnh gọi là phần chạy. Kịch bản đó khác nhau. Ví dụ: công tắc --test được đề cập ở trên không có trên máy tôi đang sử dụng ngay lúc này.

Phần chạy là một tập lệnh bash. Nó là một công cụ hữu ích để chạy tất cả các tập lệnh trong thư mục được cung cấp dưới dạng đối số. Nó thường được tìm thấy tại / usr / bin / run-tùng.

Nó có một mớ logic để quyết định chạy cái gì. Mã đó giữ câu trả lời cho câu hỏi của bạn, nhưng nó cũng thay đổi. Vì vậy, bạn cần phải đọc mã để được an toàn.

Trong phiên bản tôi đang xem nó có logic, khi làm việc trên thư mục <foo>, hãy kiểm tra <foo> /jobs.deny. Nếu tồn tại, nó từ chối chạy bất kỳ tập lệnh nào được đề cập trong tệp đó trên một dòng, một mình. Giả sử bạn có chức năng này thì thật tuyệt vời vì nó sẽ tiếp tục hoạt động khi gói cài đặt được cài đặt hoặc nâng cấp.


0

Nếu giao dịch với RHEL và các dẫn xuất (cung cấp crontabsgói), bạn có thể vô hiệu hóa rõ ràng một công việc bằng cách đặt tên của nó vào jobs.denytệp.

Từ trang crontabs / run-part man :

Việc thực thi các tệp có thể được cho phép hoặc từ chối bằng cách tạo tệp jobs.allow hoặc jobs.deny hoạt động tương tự như các tệp cấu hình cho phép / từ chối khác. Các tập tin phải được tạo trong thư mục được chỉ định.

Ví dụ /etc/cron.daily/jobs.deny có thể chứa ví dụ 0logwatch cấm thực thi tập lệnh này.


-1

Nếu bạn không muốn người dùng crontabs, chỉ cần vô hiệu hóa crond trong danh sách dịch vụ của bạn.

Trong Debian và các phiên bản dựa trên Debian, đây đơn giản chỉ là vấn đề xóa symlink khỏi /etc/rcX.d (đối với runlevel X).

Tôi không biết cách bạn xử lý các dịch vụ trong SUSE hoặc Gentoo.


4
Đó chỉ là một ý tưởng tồi. Vô hiệu hóa cron hoàn toàn sẽ vô hiệu hóa các tác vụ bảo trì hữu ích như logrotate, updateb, có thể là các nâng cấp không giám sát và sao lưu tiêu chuẩn.
Tobu

Cập nhậtb chính xác là nhiệm vụ tôi đang cố gắng vô hiệu hóa (cập nhật db cho slocate). Tuy nhiên, có, lời khuyên tồi nói chung.
benizi

Ồ xin lỗi. Tôi đã đọc sai câu hỏi của bạn và nghĩ rằng bạn muốn vô hiệu hóa TẤT CẢ các cronjob cụ thể của hệ thống, không phải là một cụ thể duy nhất.
jishi
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.