Tại sao crontabs không được lưu trữ trong thư mục nhà của người dùng?


35

Tôi tò mò muốn biết: tại sao crontabs được lưu trữ trong / var chứ không phải trong thư mục nhà của người dùng? Việc cô lập các tệp này để nâng cấp là một nỗi đau hoàn toàn nhưng tôi nghi ngờ rằng có một lý do hợp lý ...

Câu trả lời:


41

Vài lý do tôi có thể nghĩ ra:

  • Trong môi trường doanh nghiệp, bạn có thể có hàng ngàn người dùng. Nếu vậy, cron sẽ phải quét qua từng thư mục của người dùng mỗi phút để kiểm tra tệp crontab (cho dù nó đã được tạo, xóa hoặc sửa đổi).
    Bằng cách giữ chúng ở một vị trí duy nhất, nó không phải thực hiện quét chuyên sâu này.
  • Thư mục nhà có thể không phải lúc nào cũng có sẵn. Nếu các thư mục nhà là một mount tự động, chúng có thể không được gắn kết. Có cron kiểm tra chúng mỗi phút sẽ khiến chúng được gắn kết, và ngăn chúng không bị ngắt do không hoạt động. Ngoài ra, nếu thư mục chính được mã hóa và được giải mã bằng mật khẩu của người dùng, cron sẽ không thể truy cập vào thư mục chính trừ khi người dùng đã đăng nhập và giải mã / gắn nó.
  • Thư mục nhà có thể được chia sẻ trên các máy chủ. Nếu thư mục chính là chia sẻ mạng, cùng thư mục chính đó sẽ xuất hiện trên nhiều máy chủ. Nhưng bạn có thể không muốn các công việc định kỳ của mình chạy trên mọi máy chủ, chỉ một trong số chúng.

1
+1 Mặc dù theo truyền thống cronkhông quét lại các tệp đó mỗi phút; nó tải chúng một lần và chỉ đọc lại chúng trên một tín hiệu.
goldilocks

7
Nhưng bạn đã đúng về điểm số 3; theo wikipedia crontabs ban đầu trong $ HOME, cho đến khi "[Chuông devs phòng thí nghiệm] kết hợp các Unix tại lệnh vào cron, chuyển crontab file ra khỏi danh bạ nhà của người sử dụng (mà không là chủ nhà cụ thể) và vào một chung host-cụ thể thư mục spool ... "Đó cũng là khi crontablệnh được tạo có thể xử lý vấn đề tải lại.
goldilocks

2
@Patrick Hoặc khi một chương trình sử dụng lệnh utimesgọi hệ thống, với đường dẫn thư mục spool làm đối số của nó, để đặt mtime của thư mục, đó là điều mà crontablệnh của Vixie cron thực hiện.
Đánh dấu Plotnick

2
Các phiên bản đầu tiên của cron chắc chắn không nhận được các thay đổi đối với các tệp crontab của người dùng trừ khi chúng được chỉnh sửa qua crontab -e. Tôi đã bị bắt ra bởi điều này trong quá khứ trên Solaris thấy điều này trong nhiều thập kỷ cũ người đàn ông trang manpages.info/sunos/cron.1.html

2
Trên Solaris 10, crontab -elà root setuid, viết một thông báo tới /etc/cron.d/FIFOsau khi người dùng chỉnh sửa crontab.
Đánh dấu Plotnick
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.